为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这样输出来会是负的,请问怎么样才而已输出来正确的?

为什么这样输出来会是负的,请问怎么样才而已输出来正确的?

慕容森 2022-04-20 17:11:19
新手#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 来计算输出了

查看完整回答
反对 回复 2022-04-24
?
慕容3067478

TA贡献1773条经验 获得超3个赞

你这样写 系统很可能会把结果默认转化为 int型 而越界
你应该定义个 long long 型的变量x 让后把 x=111111*111111
printf("%lld\n",x);

查看完整回答
反对 回复 2022-04-24
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

%d输出10进制整数,大小一般是4个字节,%ld表示长整数,一般是8个字节,111111*111111已经超出了%ld表示的范围,所以会显示负数。

查看完整回答
反对 回复 2022-04-24
  • 3 回答
  • 0 关注
  • 378 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信