Estoy probando este código en el compilador C ++ de GNU y no puedo entender su comportamiento:
#include <stdio.h>;
int main()
{
int num1 = 1000000000;
long num2 = 1000000000;
long long num3;
//num3 = 100000000000;
long long num4 = ~0;
printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
printf("%d %ld %lld %llu", num1, num2, num3, num4);
return 0;
}
Cuando elimino el comentario de la línea comentada, el código no se compila y da un error:
error: la constante entera es demasiado grande para el tipo largo
Pero, si el código se compila como está y se ejecuta, produce valores mucho mayores que 10000000000.
¿Por qué?
<stdint.h>
y utilicenuint64_t
. Para mostrar un valor de 64 bits,printf( "%" PRIu64 "\n", val);