#include <stdio.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
Uitgang:
My number is 8 bytes wide and its value is 285212672l. A normal number is 0.
Ik neem aan dat dit onverwachte resultaat komt door het afdrukken van de unsigned long int
. Hoe druk je printf()
een unsigned long int
?
Gebruik de ll (el-el) lang-lang modifier met de u (unsigned) conversie. (Werkt in windows, GNU).
printf("%llu", 285212672);
Nou, een manier is om het te compileren als x64 met VS2008
Dit loopt zoals je zou verwachten:
int normalInt = 5;
unsigned long long int num=285212672;
printf(
"My number is %d bytes wide and its value is %ul.
A normal number is %d \n",
sizeof(num),
num,
normalInt);
Voor 32 bit code, moeten we de juiste __int64 format specifier %I64u gebruiken. Dus wordt het.
int normalInt = 5;
unsigned __int64 num=285212672;
printf(
"My number is %d bytes wide and its value is %I64u.
A normal number is %d",
sizeof(num),
num, normalInt);
Deze code werkt voor zowel 32 als 64 bit VS compiler.