关于自增++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个“+”是加号。
- 关于自增++a,和a++的相关运算,早年的有意思的笔记
- 关于自增运算符++a和a++的问题
- 早年的J2EE笔记
- 关于c语言自加运算的问题(a++)
- 关于自增和赋值的运算
- *a+=1和*a++的运算
- 运算符a++和++a的区别
- 关于自增、自减运算符的笔记
- ++a和a++的相关问题
- a ,&a, &a[0]一些有意思的问题
- 不同编译器对于(a++)*(a++)和(a++)*(++a)和(++a)*(a++)和(++a)*(++a)的运算结果
- 关于a& 0xff的运算
- 关于~a>>4的运算步骤
- 有意思的位运算
- 关于++a和a++的区别
- 关于a++和++a的区别,理解
- 关于a++(自增)的一个问题
- 自增运算,a++和++b
- android 4.x 显示、隐藏导航条
- 【中北大学2013年第一学期新生程序设计大赛 解题报告】
- NYOJ-822-画图-2013年11月2日16:36:34
- how to hide dock of running app on mac
- ASP.NET(C#) VS2010连接Oracle数据库
- 关于自增++a,和a++的相关运算,早年的有意思的笔记
- 集合的划分
- NYOJ-813-对决-2013年11月2日23:16:37
- 编程面试的10大算法概念汇总
- Shell重定向&>file、2>&1、1>&2的区别
- error C2440: 'static_cast' : cannot convert from 'void (__thiscall CTCP服务器程序Dlg::* )(WPARAM,LPARAM)'
- JXNUOJ_1023:坑爹的黑店
- 练习赛14.1,。集合的划分
- JAVA基础核心,早年的总结,今天分享