J'essaye ce code sur le compilateur C ++ de GNU et je suis incapable de comprendre son comportement:
#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;
}
Lorsque je décommente la ligne commentée, le code ne se compile pas et donne une erreur:
erreur: la constante entière est trop grande pour le type long
Mais, si le code est compilé tel quel et exécuté, il produit des valeurs bien supérieures à 10000000000.
Pourquoi?
<stdint.h>
et de l'utiliseruint64_t
. Pour afficher une valeur 64 bits,printf( "%" PRIu64 "\n", val);