Ich versuche diesen Code auf dem C ++ - Compiler von GNU und kann sein Verhalten nicht verstehen:
#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;
}
Wenn ich die kommentierte Zeile auskommentiere, wird der Code nicht kompiliert und gibt einen Fehler aus:
Fehler: Ganzzahlkonstante ist für langen Typ zu groß
Wenn der Code jedoch so kompiliert wird, wie er ist, und ausgeführt wird, werden Werte erzeugt, die viel größer als 10000000000 sind.
Warum?
<stdint.h>
und Verwendunguint64_t
. Um einen 64-Bit-Wert anzuzeigen,printf( "%" PRIu64 "\n", val);