Sto provando questo codice sul compilatore C ++ di GNU e non sono in grado di comprenderne il comportamento:
#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;
}
Quando rimuovo il commento dalla riga commentata, il codice non viene compilato e restituisce un errore:
errore: la costante intera è troppo grande per il tipo lungo
Tuttavia, se il codice viene compilato così com'è e viene eseguito, produce valori molto maggiori di 10000000000.
Perché?
<stdint.h>
e utilizzareuint64_t
. Per visualizzare un valore a 64 bit,printf( "%" PRIu64 "\n", val);