Shi*_*han 4 c memory int long-integer
#include<stdio.h>
int main()
{
long long int t=8*9*100000000;// 8 zeros
printf("%lld\n",t);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出结果: -1389934592
请回复
#include<stdio.h>
int main()
{
long long int t=8*9*1000000000; //9zeros
printf("%lld\n",t);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出结果: -1014444032
所有其他乘法给出了正确的结果,即
#include<stdio.h>
int main()
{
long long int t=8*9*10000000000; //10zeros or greater or zeros <=6
printf("%lld\n",t);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出结果: 720000000000
1000000008个零或10000000009个零符合32位int(long,不是long long),这是默认值.然后乘法与32位制作int的,
并且然后结果被转换为64位.
这是一个问题,因为结果不适合32位=>溢出.
使用10个零,int从一开始就有64位,
因为这个数字不适合32位int.
=>用64位完成计算,没问题.
如果您希望使用8-zero和9-zero数字long long,请使用LL,即.100000000LL
| 归档时间: |
|
| 查看次数: |
728 次 |
| 最近记录: |