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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值