C语言中为什么i=-a++和i=-(a++),i和a的值运算结果都是一样的?

#include<stdio.h>main(){ int a = 3, i; i = -a++; printf("%d,%d\n", i,a); a = 3; i = -(a++); printf("%d,%d\n", i,a); return 0;}前面一个可以理解,先-3赋值给a,i再自加,结果是a=-3,i=4下面一个i=-(a++),不是应该先运算括号内的吗,我理解为应该是a先自加,再-a赋值给i,那么应该是i=-4,a=4才对啊。但是事实并不是如此,而是和上面一样的结果,是我理解错误了吗?

自增/自减运算的优先级比正/负运算高, 所以这两个表达式在运算顺序上是一样的
其次, a++, 自增在后,表达式的值取a的原值, 比如a=3; i=a++; i的值是3,a的值是4
所以你给出的表达式, i结果为-3, a结果为4
也不用太过于追究, 这个东西也不见得永远是对的, 这个跟你使用的编译器有一定关系,知道怎么回事就行了,也就是在学习/考试的时候会出现, 正常人不会用这么别扭的写法
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-03
i=-(a++)是
a先自己加a变成4
然后a自增之前的值3取负号给i
因为++在后面
i是-3
~~~~~~~~~~~~~~~~~~~~~~~
i=-(++a)
就是a自己加变成4
把增加之后的值4取负号给i
i就是-4
相似回答