关于自增++a,和a++的相关运算,早年的有意思的笔记
2013-12-02 20:28
260 查看
第一题: 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个“+”是加号。
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个“+”是加号。
相关文章推荐
- 关于log对数运算的笔记
- 关于四则运算表达式生成和答案校验的笔记
- 阅读IEEE754关于浮点运算笔记
- 黑马程序员-IOS学习笔记 OC 关于匿名类相关概念
- ios学习笔记:关于nil和 null和NSNull的区别及相关问题
- 深入理解计算机系统笔记(一)关于位运算求整数平均值
- MySQL5.7 关于在Windows安装的相关笔记
- 关于Scroller的学习及相关的知识笔记get
- SIGIR 2017&2016 关于深度学习和推荐的相关文章摘要阅读笔记
- 关于无符号与有符号的相关运算
- 关于文件流的阅读笔记(文件操作相关总结) [[ 应用过 ]]
- 【IOS移动开发技术】iOS软件开发中关于屏幕旋转处理相关的学习笔记
- Pharmaceutical的同学们都看过来,关于补码运算的复习相关内容
- 关于生命周期,关于集合,早年笔记分享
- Android adb命令学习笔记(一)——adb介绍以及关于传输文件等相关基本命令
- 关于go语言的测试相关内容笔记
- 【学习笔记】自定义关于wchar_t*的相关函数
- Go语言学习笔记 --- 指针和自增自减运算及相关注意事项
- 关于新版本,iOS10的相关内容,兼容iOS 10 资料整理笔记
- SVN学习笔记10 -- Eclipse中关于SVN 的相关操作