这是一个坏人 发表于 2018-8-17 21:21:35

运算符

这是一个坏人 发表于 2018-8-17 21:22:08

想知道   怎么算的

无符号整形 发表于 2018-8-17 21:27:02

x+=--x%--y
先把它分步
x,+=,--x,%,--y。
因为--x、--y是前自减,所以
x,+=,(x-=1),%,(y-=1)
相当于(注意!这里的x等于16)
x+=16%4

x+=0
相当于
16+0
得到16。

这是一个坏人 发表于 2018-8-17 21:36:38

本帖最后由 这是一个坏人 于 2018-8-17 21:50 编辑

无符号整形 发表于 2018-8-17 21:27
先把它分步

因为--x、--y是前自减,所以


这是一个坏人 发表于 2018-8-17 21:44:22

无符号整形 发表于 2018-8-17 21:27
先把它分步

因为--x、--y是前自减,所以


这是考研真题
答案是17
0.0

无符号整形 发表于 2018-8-17 21:50:27

这是一个坏人 发表于 2018-8-17 21:44
这是考研真题
答案是17
0.0

题目错的

claws0n 发表于 2018-8-17 23:37:02

这是一个坏人 发表于 2018-8-17 21:44
这是考研真题
答案是17
0.0

自增一般不会在同一行实现。这种操作目前还没有统一,所以不同的编译器会给出不同的答案,不要太在意~
这题如果按照优先顺序的话,应该是 16

关键是感觉 发表于 2018-8-17 23:37:25

VC 答案是16
通过反汇编查看是这样执行的
1.x=x-1
2.y=y-1
3.x%y   其实是16%4
4.x=x+(16%4)

详细步骤
00401036   mov         eax,dword ptr
00401039   sub         eax,1
0040103C   mov         dword ptr ,eax
0040103F   mov         ecx,dword ptr
00401042   sub         ecx,1
00401045   mov         dword ptr ,ecx
00401048   mov         eax,dword ptr
0040104B   cdq
0040104C   idiv      eax,dword ptr
0040104F   mov         eax,dword ptr
00401052   add         eax,edx
00401054   mov         dword ptr ,eax

lvvly 发表于 2018-8-17 23:43:43

如果是x+=--x % --y的话,编译器给出的答案是16
但是如果改成x=x+--x%--y 那就是17

这是一个坏人 发表于 2018-8-18 08:01:48

claws0n 发表于 2018-8-17 23:37
自增一般不会在同一行实现。这种操作目前还没有统一,所以不同的编译器会给出不同的答案,不要太在意~
...

嗯 ~谢谢
页: [1]
查看完整版本: 运算符