黑马程序员技术交流社区

标题: 复合运算符疑问 [打印本页]

作者: holfioo    时间: 2015-5-13 19:53
标题: 复合运算符疑问
本帖最后由 holfioo 于 2015-5-13 19:58 编辑

如下:int a = 10;int b1 = (a++)+(++a);
a = 10;
int b2 =(++a)+(a++);

b1 , b2 结果如何。?脑袋有点乱,死活搞不明白。。

不是应该b1 = 10+ 11 = 21么?
b2 = 11 +11  = 22~





作者: 坏人难当    时间: 2015-5-13 23:10
本帖最后由 坏人难当 于 2015-5-13 23:11 编辑

你这么记:
++a:+在前面,是在该算式出现的时候直接运算,他所在的位置的值是运算加法后的值
a++:   a在前面,他所在的位置直接就是未运算的前当前a的值,读取完a++并获取a的值之后才执行自身的加法运算

所以
int a = 10;
int b1 = (a++)+(++a);        //b1 = ( 运算前的值10 )   <a执行自加运算=11>   +  ( 运算后的值11+1=12 )
a = 10;
int b2 =(++a)+(a++);         //b2 = ( 运算后的值10+1=11 )  +  ( 运算前的值11 )  <a执行自加运算=12>

b1= 10+12;      b2=11+11
作者: hehelaicaicai    时间: 2015-5-14 13:10
++a:先把a的值加1,再进行赋值。a++先赋值再加1。

QQ截图20150514131247.jpg (68.96 KB, 下载次数: 24)

QQ截图20150514131247.jpg

作者: 小小黑马很成器    时间: 2015-5-14 15:59
我也是刚入们,看书才搞明白这个问题的,正如楼上2位大神说的;分前缀(++a)和后缀(a++),前缀:就是先将操作的数值增加1,然后取操作数的新增值作为表达式的结果、后缀:是将操作数增加1之前的值作为表达式的结果。
所以b1 = 10+12
        b2 = 11+11
作者: su199325    时间: 2015-5-17 16:56
应该是10+12
作者: su199325    时间: 2015-5-17 16:57
应该是10+12和11+11




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