このコードをGNUのC ++コンパイラで試していますが、その動作を理解できません。
#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;
}
コメント行のコメントを解除すると、コードがコンパイルされず、エラーが発生します。
エラー:整数定数が長い型には大きすぎます
ただし、コードをそのままコンパイルして実行すると、10000000000よりはるかに大きい値が生成されます。
どうして?
<stdint.h>
して使用することをお勧めしますuint64_t
。64ビット値を表示するには、printf( "%" PRIu64 "\n", val);