The printf
fungsi mengambil argumen jenis, seperti %d
atau %i
untuk signed int
. Namun, saya don't melihat apa-apa untuk seorang lama
nilai.
Menempatkan l
(lowercased huruf L) langsung sebelum specifier.
unsigned long n;
long m;
printf("%lu %ld", n, m);
Saya pikir anda berarti:
unsigned long n;
printf("%lu", n); // unsigned long
atau
long n;
printf("%ld", n); // signed long
Pada kebanyakan platform, lama
dan int
adalah ukuran yang sama (32 bit). Masih, itu tidak memiliki format specifier:
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
Untuk 64 bit, anda'd ingin lama
:
long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned
Oh, dan tentu saja, itu's yang berbeda di Windows:
printf("%l64d", n); // signed
printf("%l64u", un); // unsigned
Sering, ketika saya'm percetakan 64-bit nilai-nilai, saya merasa perlu untuk mencetaknya di hex (biasanya dengan angka yang besar, mereka pointer atau bidang bit).
unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"
akan mencetak:
0x00000000DEADBEEF
Btw, "lama" tidak't berarti bahwa banyak lagi (pada mainstream x64). "int" adalah platform default int size, biasanya 32 bit. "lama" biasanya ukuran yang sama. Namun, mereka memiliki portabilitas semantik pada platform yang lebih tua (dan modern platform tertanam!). "lama" adalah 64-bit dan biasanya apa yang orang-orang yang dimaksudkan untuk digunakan kecuali mereka benar-benar benar-benar tahu apa yang mereka lakukan editing sepotong x-platform portabel kode. Bahkan kemudian, mereka mungkin akan digunakan makro bukan untuk menangkap makna semantik dari jenis (misalnya uint64_t).
char c; // 8 bits
short s; // 16 bits
int i; // 32 bits (on modern platforms)
long l; // 32 bits
long long ll; // 64 bits
Kembali pada hari, "int" adalah 16 bit. Anda'd pikir sekarang akan menjadi 64 bit, tapi tidak, itu akan menyebabkan gila portabilitas masalah. Tentu saja, bahkan ini adalah penyederhanaan dari arcane dan sejarah yang kaya kebenaran. Lihat wiki:Integer
Dalam kasus anda'kembali mencari untuk mencetak unsigned lama
seperti saya, menggunakan:
unsigned long long n;
printf("%llu", n);
Untuk semua kombinasi lainnya, saya percaya anda menggunakan tabel dari printf manual, mengambil baris, kemudian kolom label untuk apapun jenis yang anda're berusaha untuk mencetak (seperti yang saya lakukan dengan printf("%llu", n)
di atas).