Bu kodu GNU'nun C ++ derleyicisinde deniyorum ve davranışını anlayamıyorum:
#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;
}
Yorumlanan satırı kaldırdığımda kod derlenmiyor ve bir hata veriyor:
hata: tamsayı sabiti uzun tip için çok büyük
Ancak, kod olduğu gibi derlenir ve çalıştırılırsa, 10000000000'den çok daha büyük değerler üretir.
Neden?
<stdint.h>ve kullanmanızı öneririmuint64_t. 64 bitlik bir değer görüntülemek içinprintf( "%" PRIu64 "\n", val);