急需解答简单的C语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 00:05:49
main()
{int a=327677,b;
b=a+1;
printf("%d",b);
}
问:为什么输出答案是-2?什么时候要用到补码呢?

假设x=3
问(x++)+(x++)+(x++)=?
(++x)+(++x)+(++x)=?

请将答案清楚的解释一下,谢谢!
在16位下操作的!
大哥你们的答案咋都不一样啊?我到底相信谁啊?
还有大哥们上面我打错了32767打成327677,你们貌似都按32767解释,你们到底有没有认真看我的问题啊?

数据存储的时候,以其补码进行存储。整型数范围为-32768——32767.若大于32767则转为负数。32768的补码和原码一样,补码加1后和-1的原码一样.同样32769的补码和-2的原码一样.按以下面的顺序循环:(这是考虑补码的形式下的排序)
-32768,-32767,-32766,......,-2,-1,32767,32766,32765,......,3,2,1,0

(x++)+(x++)+(x++)=12
x++ 先使用数据x,再使x本身加1
第一步第一个括号,X=3,第二步第二个括号X=4,第三步,x=5 总和为12
(++x)+(++x)+(++x)=15
++x先使x本身加1(如使x=3变成x=4),再使用x(此时x=4)
第一步,x=4,第二步x=5,第三步x=6 总和为15

main()
{
int x=3,y=3,m,n,p=3,k=3;
m=(x++)+(x++)+(x++);
n=(++y)+(++y)+(++y);
printf("%d,%d ",((p++)+(p++)+(p++)),((++k)+(++k)+(++k)));
printf("\n");
printf("%d,%d",m,n);
}
输出结果:
12,15
9,18

不可能问327677的问题 我默认为32767了

首先 你是在哪个系统下运行的? 执行代码是多少位的 ?16 or32?

应该是16或8位的吧。

由于 a 是int 类型 在16位机和8位机 范围是-32768~32767

超出范围 所以最后输出是-2

(x++)+(x++)+(x++)=3+3+3=9 式子执行结束后 执行++
(++x)+(++x)+(++x)=4+5+6+1=16 之前进行++运算