The printf
Fungsi mengambil jenis argumen, seperti %d
atau %i
untuk signed int
. Namun, saya tidak melihat apa pun untuk long
nilai.
c
printf
long-integer
Thomas Owens
sumber
sumber
Jawaban:
Letakkan
l
(huruf kecil huruf L) langsung sebelum specifier.sumber
printf("%ld", ULONG_MAX)
menampilkan nilai sebagai -1. Seharusnya tidakprintf("%lu", ULONG_MAX)
ditandatangani lama seperti yang dijelaskan oleh @ Blorgbeard di bawah ini.%ld
, agar lebih harmonis dengan pertanyaan OP.%l
pemicuwarning: unknown conversion type character 0x20 in format [-Wformat]
Saya pikir maksud Anda:
atau
sumber
Pada sebagian besar platform,
long
danint
memiliki ukuran yang sama (32 bit). Namun, ia memiliki penentu format sendiri:Untuk 64 bit, Anda ingin
long long
:Oh, dan tentu saja, ini berbeda di Windows:
Seringkali, ketika saya mencetak nilai 64-bit, saya merasa terbantu untuk mencetaknya dalam hex (biasanya dengan angka yang besar, itu adalah pointer atau bidang bit).
akan dicetak:
Btw, "panjang" tidak berarti lagi (pada mainstream x64). "int" adalah ukuran int standar platform, biasanya 32 bit. "panjang" biasanya berukuran sama. Namun, mereka memiliki semantik portabilitas yang berbeda pada platform lama (dan platform embedded modern!). "long long" adalah angka 64-bit dan biasanya yang dimaksudkan orang untuk digunakan kecuali mereka benar-benar tahu apa yang mereka lakukan mengedit sepotong kode portabel x-platform. Bahkan kemudian, mereka mungkin akan menggunakan makro sebagai gantinya untuk menangkap makna semantik dari tipe tersebut (mis. Uint64_t).
Kembali pada hari itu, "int" adalah 16 bit. Anda akan berpikir itu sekarang akan menjadi 64 bit, tetapi tidak, itu akan menyebabkan masalah portabilitas yang gila. Tentu saja, bahkan ini adalah penyederhanaan dari rahasia dan kebenaran yang kaya akan sejarah. Lihat wiki: Integer
sumber
long
ukuran 32" masih benar. Misalnya, aku di Oracle Linux x86_64 / amd64, dan dengannvcc
sebuahlong
adalah 8 byte.Itu tergantung, jika Anda mengacu pada unsigned lama karakter formatnya
"%lu"
. Jika Anda merujuk untuk menandatangani lama karakter pemformatan adalah"%ld"
.sumber
%ld
lihatprintf
referensi di cplusplus.comsumber
Jika Anda ingin mencetak
unsigned long long
seperti saya, gunakan:Untuk semua kombinasi lain, saya yakin Anda menggunakan tabel dari manual printf , mengambil baris, lalu label kolom untuk jenis apa pun yang Anda coba cetak (seperti yang saya lakukan dengan di
printf("%llu", n)
atas).sumber
Saya pikir untuk menjawab pertanyaan ini secara pasti akan membutuhkan mengetahui nama dan versi kompiler yang Anda gunakan dan platform (tipe CPU, OS dll) yang dikompilasi untuknya.
sumber