c语言逻辑运算顺序

来源:百度知道 编辑:UC知道 时间:2024/06/25 09:40:37
main()
{
int x=-1,y=5,z=6,k;
k=x++>=0&&!(y--<=0)||(z=x+y);
printf("%d,%d,%d,%d\n",k,x.y,z)
}
k=x++>=0&&!(y--<=0)||(z=x+y)应该先算哪个在算那个?如何计算?
为什么输出结果是1 0 5 5
y,z是怎么算出是5 的??
急!急!急!
谢谢谢大家了

k= ((x++)>=0)&&(!(y--<=0))||(z=x+y)
就是这个顺序

x++是先使用x的值,再++,之后,x的值变为0.
所以x++>=0这个表达式的值为false
对于逻辑与运算,如果第一个表达式为false,则第二个表达式将不验证
所以!(y--<=0)没有执行,y的值仍然为5
对于或运算,若第一个表达式的值为false,则还要验证第二个表达式
于是z=x+y执行了,表达式的值为5,被强制转换为bool类型,则表达式的值为true
最后得出整个k=后面的表达式的值为true,所以k=1;

1.(y--)<=0
2.Z=x+y
3.x++>=0
4.!(y--<=0)
5.x++>=0&&!(y--<=0)
6.x++>=0&&!(y--<=0)||(z=x+y)

先!接着依次是&&、||

x++ 得 0
x++>=0 得 1
y-- 得 4
!(y--<=0) 得 1
z=x+y 得 4
1&&1||4

我记得好像是这样的!~算没算错就不知道了!~错了请原谅!