问题描述
- int x=4;求x+=x-=x-x--的值
-
int x=4;求x+=x-=x-x--的值,为什么先计算x-=x-x,--的优先级不是比赋值运算符的优先级高吗?
解决方案
x+=x-=x-x--;
01052D35 mov eax,dword ptr [x]
01052D38 sub eax,dword ptr [x]
01052D3B mov ecx,dword ptr [x]
01052D3E sub ecx,eax
01052D40 mov dword ptr [x],ecx
01052D43 mov edx,dword ptr [x]
01052D46 add edx,dword ptr [x]
01052D49 mov dword ptr [x],edx
01052D4C mov eax,dword ptr [x]
01052D4F sub eax,1
01052D52 mov dword ptr [x],eax
解决方案二:
--这里是在后面,优先级低,要先运算完,才会执行,前-- 会提前执行,但是这个取决于编译器,有的编译器对各类的--,++啊,处理不一样
解决方案三:
定义函数 求sinh(x)的值。
解决方案四:
如果是c/c++
这种问题的标准答案是结果未定义。
因为不同厂家的编译器对这个问题的理解是不一样的,中间还有个编译器优化的问题。
但是如果是java的话,是解释执行的话,只要语法通过了,那么凭本人的经验,答案是唯一的,但是java是怎么理解的,天知道!
解决方案五:
应该是先算x--,x=3,然后x-x--,是-1,然后x-=-1,x=4,x-=-1表达式的值是3,就是x+=3,x=7,x+=3表达式的值是4,所以最后表达式的值是4
解决方案六:
--的前后貌似优先级不一样
解决方案七:
x+=x-=x-x-- (x--)最后执行
x-- =4 ,x =3;
x-x-- = -1;
x-=-1,x=3;-->x=x--1--->x=4;
x+=4,x=4--->x=8
解决方案八:
我很好奇为啥会有人想出这么刁钻的优先级问题?实际使用中可以加括号的