c语言计算截断问题
答案:1 悬赏:50 手机版
解决时间 2021-12-01 15:28
- 提问者网友:謫仙
- 2021-12-01 01:53
c语言计算截断问题
最佳答案
- 五星知识达人网友:走死在岁月里
- 2021-12-01 02:29
先贴代码:
#include
int main()
{
unsigned _int64 c = 0, a = 162203985, b = 162203985;
c = a*b;
printf("c = %I64d
",c);
return 0;
}问题挺有意思的,从中我自己也学习了,我用的是VC6.0,所以不支持long long型,就用了_int64来代替,效果是一样的。
可以从下图看到,c的空间是有剩余的,所以问题不在这里;那问题就在计算上了,如果直接计算两数相乘的结果,计算机按默认分配的空间不够,所以结果不正确也就正常了;
所以我才想到把两个乘数也一起申请一个64位的空间,这样计算肯定就不会按照整型计算了,结果如我所料:
#include
int main()
{
unsigned _int64 c = 0, a = 162203985, b = 162203985;
c = a*b;
printf("c = %I64d
",c);
return 0;
}问题挺有意思的,从中我自己也学习了,我用的是VC6.0,所以不支持long long型,就用了_int64来代替,效果是一样的。
可以从下图看到,c的空间是有剩余的,所以问题不在这里;那问题就在计算上了,如果直接计算两数相乘的结果,计算机按默认分配的空间不够,所以结果不正确也就正常了;
所以我才想到把两个乘数也一起申请一个64位的空间,这样计算肯定就不会按照整型计算了,结果如我所料:
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯