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

新手
#include<stdio.h>
int main()
{
printf("%lld\n",111111*111111);
return 0;
}

慕容森
浏览 379回答 3
3回答

暮色呼如

首先解释为什么是负值因为溢出了 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

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

30秒到达战场

%d输出10进制整数,大小一般是4个字节,%ld表示长整数,一般是8个字节,111111*111111已经超出了%ld表示的范围,所以会显示负数。
打开App,查看更多内容
随时随地看视频慕课网APP