黑马程序员技术交流社区

标题: 一道测试你是否深刻理解++(前后)的运算题. [打印本页]

作者: z黑马h    时间: 2014-2-28 16:38
标题: 一道测试你是否深刻理解++(前后)的运算题.
发现论坛里有不少人对运算符 ++ -- (前后)运算不是太理解.

                int x = 2;
                x = 2+x++ + ++x+x++ + ++x+x++;
    运算后x=24;

   不借助电脑运算,手写运算步骤,并且运算结果x=24. 说明你对++ --(前后的运算)有一个深刻的理解.


作者: l939    时间: 2014-2-28 17:25
- -脑补结果,确实是24- -。。。。
作者: wdtdcm    时间: 2014-2-28 17:34
x = 2+x++ + ++x+x++ + ++x+x++;
x=2 + 2      +     4+4    +      6+6;

x++是先赋值,再+1,而++x是先+1,再赋值.
如第一个x++ ,原来int x=2;现在,先赋值x=2,再++,就 变成了x=3;
再下一个++x,那么是x=3+1,赋值x=4,以此类推
作者: 乔青山    时间: 2014-2-28 17:35
我觉着你这道题考的不是x++和++x的理解有多深刻,而是一个人他数出一行乱码中有多少个+号的能力。   
x = (2+(x++)) + ((++x)+(x++)) + ((++x)+(x++));
你这样写可以么?
x = (2+(x++)) + ((++x)+(x++)) + ((++x)+(x++));
结果        1                         2    3                        4    5
x1=2
x2=4
x3=4
x4=6
x6=6
作者: zhouliang    时间: 2014-2-28 17:47
这道题的关键在于运算符(x++)(++x)的正确理解和应用,要仔细观察表达式中的各元素,并且正确区分开各个元素,最后才是运算
作者: 郝大龙0104    时间: 2014-2-28 18:12

                int x = 2;
                x = 2+x++ + ++x+x++ + ++x+x++;

这道关键在  x++  和  ++x   和 代码运算完 x的值是多少?

作者: qqwwdr    时间: 2014-2-28 21:12
我是来凑热闹的,围观数++
作者: twtzhongxin    时间: 2014-2-28 21:26
在C/C++里结果与编译器相关,java里应该是24
作者: 谭荣强    时间: 2014-3-1 00:20
搞了40多分钟终于明白了
作者: 严旭晟    时间: 2014-3-1 01:51
twtzhongxin 发表于 2014-2-28 21:26
在C/C++里结果与编译器相关,java里应该是24

终于有个懂运算的人,这要看编译器对算术表达式的结合顺序,是从左还是从右

x++ vs ++x参与含有x的运算时,后者x多参与一次应该都懂
等式右边的表达式在Java中,可快速计算:1.总共3次x++ 和2次++x
2.如果将3次x++替换为3次++x(或者相反),则表达式形式统一,方便口算
3.统一形式后,口算x = 2 + (++x)+(++x)+(++x)+(++x)+(++x); //(假设编译器默认从左)
显然,这是一个等差数列求和 x = 2+3+4+5+6+7 =27
4.由于3次++x替换相当于多加了3,故愿结果=27-3
作者: Aenon    时间: 2014-3-1 08:35
这个加加 减减 可以这么简单理解:x在内存里传值是 ++x 先加后传值,x++先传值再加。(x--,--x)也是一样,两个动作(运算,传值)理解先后就很容易了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2