tyf1218405122 发表于 2022-3-24 12:05:05

关于运算符

int x=4,y=24,z=2;
z=(--y/++x)*z--;

执行后z的值是多少?

isdkz 发表于 2022-3-24 12:15:48

本帖最后由 isdkz 于 2022-3-24 12:16 编辑

自增自减在前就是先自增自减再使用,自增自减在后就是先使用再自增自减,

所以 z = (--y/++x)*z-- 即 z = (y - 1) / (x + 1) * z = 23 / 5 * 2 = 8

23 / 5 为 4,因为 int 类型除以 int 类型还是 int

tyf1218405122 发表于 2022-3-24 12:49:17

isdkz 发表于 2022-3-24 12:15
自增自减在前就是先自增自减再使用,自增自减在后就是先使用再自增自减,

所以 z = (--y/++x)*z-- 即 z ...

书上写的7那应该是书上答案写错了

isdkz 发表于 2022-3-24 12:51:53

tyf1218405122 发表于 2022-3-24 12:49
书上写的7那应该是书上答案写错了

可能吧,我还运行了一遍来着,运行结果就是 8 呀

cuixf 发表于 2022-3-24 13:17:55

跑遍程序看看就行

心驰神往 发表于 2022-3-24 16:46:49

{:10_279:}

jhq999 发表于 2022-3-24 18:53:07

本帖最后由 jhq999 于 2022-3-24 18:56 编辑

编译器不一样,结果不一样,这种问题只能说明,涉及自增自减的能分解,尽量分解,不然容易出BUG
z=(--y/++x)*z--;
想让结果等于8
--y;
++x;
z=y/x*z;
想要结果等于7
--y;
++x;
z=y/x*z;
z--;

tyf1218405122 发表于 2022-3-24 19:48:46

jhq999 发表于 2022-3-24 18:53
编译器不一样,结果不一样,这种问题只能说明,涉及自增自减的能分解,尽量分解,不然容易出BUG
z=(--y/++ ...

不同编译器对最后这个z--处理一样吗?
是有的不处理z--;
有的处理是吗?

jhq999 发表于 2022-3-24 20:21:44

tyf1218405122 发表于 2022-3-24 19:48
不同编译器对最后这个z--处理一样吗?
是有的不处理z--;
有的处理是吗?

沐雨尘枫 发表于 2022-3-26 21:21:38

看下小甲鱼的表格算呗

贾政景 发表于 2022-4-4 17:19:13

就应该是8,因为运行完(--y/++x)*z--后下一条应该是运行Z-1,再然后才是把8赋值给上一步后的z
页: [1]
查看完整版本: 关于运算符