关于自增++a,和a++的相关运算,早年的有意思的笔记

来源:互联网 发布:删除列sql语句 编辑:程序博客网 时间:2024/05/22 03:24


第一题: x = 5;

               System.out.println((x++)+1);

------------------------------------答案:6     -------------------------------

原因如同上面所说:X++,是表示X仍然是5,等表达式结束后变成6,但是(X++)+1=6,然后计算机知道X=6被赋值了,但是已经打不出来了,千万注意前6和后6完全两码事!  前一个6是X+1得的,后一个6,是X表达式结束后X++得的。



               System.out.println(x);

-------------------------------------答案:6 ----------------------------------

由于上面X++已经被重新赋值了,所以X现在是后一个6,也就是X++重新赋值的6.







第二题: x = 5

              System.out.println(x+++x++);

------------------------------------答案:11---------------------------------  

相当于:x+(++x++);  问题关键是:计算机读取在同优先级时是从左读到右的,也就是先读X然后再读+,这时计算机认为X准备+后面的数据,于是后面 就成为了:

(x+)(++x++) =5+6=11,  ++X大家都应该清楚是属于先加,这点的X是6。后面的++是表达式过后才加,对于结果无影响,忽略掉,后面都如此,不再累述!
 所以5+6=11.      


                                                                                                                       


第三题  x=5;

              System.out.println(x+++1+x++);

---------------------------------答案:12--------------------------------- 

相当于:x+(++(1+x)++); 基本道理同上,唯一区别是增加了基本数据 1,因为计算机读取到X然后+,也就是计算机,

认为X+准备加后面数据了,但是后面是非法数据++1,只有变量才能自增,常数是非法自增的,所以1+X然后再自曾:++(1+x),最后得5+7=12.






第四题 x=5;

              System.out.println(x+++x);

--------------------------------答案:11---------------------------------

上面已解释 相当于:x+(++x);得:5+6=11







第五题   x=5;

               System.out.println(x++ + 1); 

--------------------------------答案:6---------------------------------

 区别是多了空格,但空格无意义,有跟没有一个样子 相当于:x++ +1 =x+++1=5+1=6;但要说明下为什么这点X后面“+”没判定成+而是++,原因是++1是非法的,所以计算机自动调整成(x++)+1;------------原因是出现了常数1,同时说明下x++1是非法的。

               System.out.println(x++ + x);

---------------------------------答案:11------------------------------- 跟上面一样,有跟没有一样 相当于:x+(++x);




--------------------------------------------割掉啊,都焦了!!-------------------------------------------



重点题目:x+++x+++x++ =(x+)(++x+)(++x++)=5+6+7=18;

-----------------------------------------第一个X+是5,但是到第2个++X+的时候X在前面还是5,自增变6,第3个X时候,++X++本身为上一次赋值的6,自增为7,



然后我们再追加:X+++X+++X+++X+++X+++X+++X++=5+6+7+8+9+10+11=56;同上面的道理,自己验证,

然后我们再再追加:++x+++x+++x++      =(++x+)(++x+)(++x++)=这题是错误的,但是错误的提示会直接告诉你X后面跟的是+号这个问题,他的错误提示是:运算符+不能应用于<any>.int.但是这个问题是第一个"+"号引起的引用不明确错误,但从这点可以知道第3个“+”是加号。


原创粉丝点击