1. 程式人生 > >64位整數的計算和列印

64位整數的計算和列印

先看第一段程式碼:

#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