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

猜你喜欢

转载自blog.csdn.net/liji_digital/article/details/82619765