#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;
}
Salida:
My number is 8 bytes wide and its value is 285212672l. A normal number is 0.
Supongo que este resultado inesperado se debe a la impresión del unsigned long long int
. ¿Cómo se imprime con printf()
un unsigned long long int
?
Utilice el modificador ll (el-el) long-long con la conversión u (unsigned). (Funciona en windows, GNU).
printf("%llu", 285212672);
Bueno, una forma es compilarlo como x64 con VS2008
Esto se ejecuta como es de esperar:
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);
Para el código de 32 bits, tenemos que utilizar el especificador de formato correcto __int64 %I64u. Así que se convierte en.
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);
Este código funciona tanto para el compilador VS de 32 como de 64 bits.