64位整數的計算和列印
阿新 • • 發佈:2018-11-19
先看第一段程式碼:
#include <stdio.h>
int main(void)
{
long long ll = 4096 * 1024 * 1024;
FILE * fp = fopen("E:\\result.txt", "w");
fprintf(fp, "I64d = %I64d, d = %d\n", ll, ll);
if (100 < ll)
{
fprintf(fp, "100 < ll");
}
else
{
fprintf(fp, "100 >= ll");
}
fclose(fp);
return 0;
}
輸出 結果 :
I64d = 0, d = 0
100 >= ll
從上面的結果來看,不論使用I64d的格式,還是普通的%d格式,輸出結果都是0.推斷 ll == 0。fprintf列印的 100 >= ll也從側面印證了這一點。
為什麼ll會等於0?
猜測是不能一口氣計算4096 * 104 * 1024,這樣一來,得數剛好超過32位整數的表述範圍
改為:
#include <stdio.h> int main(void) { long long ll = 4096; ll = ll * 1024 * 1024; FILE * fp = fopen("E:\\result.txt", "w"); fprintf(fp, "I64d = %I64d, d = %d\n", ll, ll); if (100 < ll) { fprintf(fp, "100 < ll"); } else { fprintf(fp, "100 >= ll"); } fclose(fp); return 0; }
結果 :
I64d = 4294967296, d = 0
100 < ll
可見
1)I64d計算是要注意;
2)要用%I64d輸出64位數,不能用%d