新手#include<stdio.h>int main(){printf("%lld\n",111111*111111);return 0;}
3 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
首先解释为什么是负值
因为溢出了 111111*111111=12345654321 超出了int能表示的范围
可能你要问 不是已经%lld了吗 没错 %lld是用于long long类型的,但只代表输出的时候按照long long的类型输出,并不能影响后面参数的实际类型
对于整型常数,C语言默认都是int型 除非有特殊标明
接下来说解决方法
很简单 提供两种解决方法
第一种 强制转换 无所不能的强制转换
只要printf("%lld\n",(long long )111111*111111);即可
第二个可以不用,因为运算的时候自动会按照高级别类型转换 当然你加上也没关系
第二种方法 后缀
printf("%lld\n",111111ll*111111);
在第一个数字结尾加上两个l 即L 等于告诉系统,这个不是int型 而是long long型 这样就可以按照long long 来计算输出了
慕容3067478
TA贡献1773条经验 获得超3个赞
你这样写 系统很可能会把结果默认转化为 int型 而越界
你应该定义个 long long 型的变量x 让后把 x=111111*111111
printf("%lld\n",x);
30秒到达战场
TA贡献1828条经验 获得超6个赞
%d输出10进制整数,大小一般是4个字节,%ld表示长整数,一般是8个字节,111111*111111已经超出了%ld表示的范围,所以会显示负数。
- 3 回答
- 0 关注
- 378 浏览
添加回答
举报
0/150
提交
取消