问一个小问题

时间:2022-10-13 19:31:02
我在其他地方看到一道题:
    int x=17,y=5;
    x*=x++/--y;
问:x的值是多少??
我用VC做过试验后发现结果与答案一样,都是69。看到一位仁兄的解释为x++/--y就是17/4=4,x*=4就是17*4=68,x在这之后还会自加1,所以是69。看到这里,我发现自己对于--和++的理解不对,以此题为例,我认为x应该在执行x++后立即加1,而不是在整个语句结束之后加1,我知道自己的这种理解是错的,所提请教各位如何理解当作后缀的--和++。在我看过此题之后,我觉得作为后缀的--和++在其变量参与完与其自身有关的所有运算之后立即减1或加1,以此题为例,程序在执行完x++后,因为x还要参与乘法,所以不会立即加1,而是在语句结束之后加1。如果程序改为int a=1,x=17,y=5; a*=x++/--y; ,由于x只参与x++的运算,所有x在x++后立即加1 。我的理解正确吗??请各位不吝赐教。谢谢~

18 个解决方案

#1


不要在表达式中使用可能修改表达式中另外一块的任何子表达式,弄明白这个对你也毫无意义,因为你首要的是要避免写这种表达式,而不是去在错误的使用这种表达式的前提下,看看表达式怎么算

#2


这种题实际意义不大,最好用规范的写作方式,用括号括起 ,减少误解

#3


不要迷信书、考题、老师;
要迷信CPU、编译器、调试器、运行结果。

#4


引用 2 楼 birdthree 的回复:
这种题实际意义不大,最好用规范的写作方式,用括号括起 ,减少误解


特别是第二行代码的x++,不同编译器下可能会有所不同

你可以试一下VC,TC来编译看看结果就知道了

#5


我想知道自己后来所说的对作为后缀的--和++的理解是否正确,想知道它们对于变量什么时候减1,什么时候加1,并不是针对我说的第一个程序。请赐教!

#6


引用 3 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师;
要迷信CPU、编译器、调试器、运行结果。
问一个小问题

#7


引用 2 楼 birdthree 的回复:
这种题实际意义不大,最好用规范的写作方式,用括号括起 ,减少误解

up

#8


.........好无聊呀

#9


也不要迷信编译器,那东西因产商的喜好而定。

#10


这++ --东西最初来自于计算机等级考试,后来有被很多公司当面试题用.确实没有啥用处,不同编译器结果的确不同,而且项目中这么写准回家,可不少公司还是把这个做面试题,哎........

#11


引用楼主 hy1107648 的回复:
我在其他地方看到一道题:
  int x=17,y=5;
  x*=x++/--y;
问:x的值是多少??

我的理解是先17/4=4 然后18*4=72

引用楼主 hy1107648 的回复:
我用VC做过试验后发现结果与答案一样,都是69。

你用其他编译器测试了吗?不过,我VC,测试也是69!  我怀疑出这种题目的老师也就用的是VC了

引用楼主 hy1107648 的回复:
我用VC做过试验后发现结果与答案一样,都是69。看到一位仁兄的解释为x++/--y就是17/4=4,x*=4就是17*4=68,x在这之后还会自加1,所以是69。看到这里,我发现自己对于--和++的理解不对

我看你未必错,换个环境没准就对了!呵呵……
而那位高手的解答你不觉着有点牵强吗!x/y ,难道不算使用了x,不算的话怎么得到的4!既然使用了,x的值就应该+1为18,还要等到最后整个表达式结束后才使x+1!我觉着,也就只能是编译器的道理了……

引用楼主 hy1107648 的回复:
如果程序改为int a=1,x=17,y=5; a*=x++/--y; ,由于x只参与x++的运算,所有x在x++后立即加1 。我的理解正确吗??

正确,这个是没有争议的!这样没有争议的多好啊……

#12


个人意见:写出连自己都无法预测运行结果的代码的程序员该杀!

#13


引用 12 楼 zhao4zhong1 的回复:
个人意见:写出连自己都无法预测运行结果的代码的程序员该杀!

程序要易读易懂,不能有分歧呀~~
分步写

#14


引用 12 楼 zhao4zhong1 的回复:
个人意见:写出连自己都无法预测运行结果的代码的程序员该杀!


绝对该杀,简直折腾人……

#15


关于++ -- 都是谭浩强惹的祸~

#16


應該是68

#17


后缀的--和++,是以分号为界定的。执行完整条语句后在--或++

#18


玩弄技巧,容易陷入自己做的迷宫

#1


不要在表达式中使用可能修改表达式中另外一块的任何子表达式,弄明白这个对你也毫无意义,因为你首要的是要避免写这种表达式,而不是去在错误的使用这种表达式的前提下,看看表达式怎么算

#2


这种题实际意义不大,最好用规范的写作方式,用括号括起 ,减少误解

#3


不要迷信书、考题、老师;
要迷信CPU、编译器、调试器、运行结果。

#4


引用 2 楼 birdthree 的回复:
这种题实际意义不大,最好用规范的写作方式,用括号括起 ,减少误解


特别是第二行代码的x++,不同编译器下可能会有所不同

你可以试一下VC,TC来编译看看结果就知道了

#5


我想知道自己后来所说的对作为后缀的--和++的理解是否正确,想知道它们对于变量什么时候减1,什么时候加1,并不是针对我说的第一个程序。请赐教!

#6


引用 3 楼 zhao4zhong1 的回复:
不要迷信书、考题、老师;
要迷信CPU、编译器、调试器、运行结果。
问一个小问题

#7


引用 2 楼 birdthree 的回复:
这种题实际意义不大,最好用规范的写作方式,用括号括起 ,减少误解

up

#8


.........好无聊呀

#9


也不要迷信编译器,那东西因产商的喜好而定。

#10


这++ --东西最初来自于计算机等级考试,后来有被很多公司当面试题用.确实没有啥用处,不同编译器结果的确不同,而且项目中这么写准回家,可不少公司还是把这个做面试题,哎........

#11


引用楼主 hy1107648 的回复:
我在其他地方看到一道题:
  int x=17,y=5;
  x*=x++/--y;
问:x的值是多少??

我的理解是先17/4=4 然后18*4=72

引用楼主 hy1107648 的回复:
我用VC做过试验后发现结果与答案一样,都是69。

你用其他编译器测试了吗?不过,我VC,测试也是69!  我怀疑出这种题目的老师也就用的是VC了

引用楼主 hy1107648 的回复:
我用VC做过试验后发现结果与答案一样,都是69。看到一位仁兄的解释为x++/--y就是17/4=4,x*=4就是17*4=68,x在这之后还会自加1,所以是69。看到这里,我发现自己对于--和++的理解不对

我看你未必错,换个环境没准就对了!呵呵……
而那位高手的解答你不觉着有点牵强吗!x/y ,难道不算使用了x,不算的话怎么得到的4!既然使用了,x的值就应该+1为18,还要等到最后整个表达式结束后才使x+1!我觉着,也就只能是编译器的道理了……

引用楼主 hy1107648 的回复:
如果程序改为int a=1,x=17,y=5; a*=x++/--y; ,由于x只参与x++的运算,所有x在x++后立即加1 。我的理解正确吗??

正确,这个是没有争议的!这样没有争议的多好啊……

#12


个人意见:写出连自己都无法预测运行结果的代码的程序员该杀!

#13


引用 12 楼 zhao4zhong1 的回复:
个人意见:写出连自己都无法预测运行结果的代码的程序员该杀!

程序要易读易懂,不能有分歧呀~~
分步写

#14


引用 12 楼 zhao4zhong1 的回复:
个人意见:写出连自己都无法预测运行结果的代码的程序员该杀!


绝对该杀,简直折腾人……

#15


关于++ -- 都是谭浩强惹的祸~

#16


應該是68

#17


后缀的--和++,是以分号为界定的。执行完整条语句后在--或++

#18


玩弄技巧,容易陷入自己做的迷宫