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

原创 2013年12月02日 20:28:03


第一题: 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个“+”是加号。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++中operator <<中的自增自减运算

C++的cout用来输出数据,但是在cout中使用自增、自减运算符时需格外注意。如下代码:#include using namespace std; int main() { int x =...

C语言之优先级、结合性与自增运算

优先级、结合性这些概念在初学的时候并没有放在心上,今天又碰到这个问题,查了不少资料,再次做个总结。 在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。一个满分的回答是:它是仲裁者,在...

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)

c++自增自减运算汇总(经典)

c++自增自減問題  在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。变量i被称为“计数器”,用来记录完成某一操作的次数。C语言为这种计数器操作提供了两个更为简洁的运算符,...

C语言中指针和自增运算符结合时的运算顺序问题

在C语言中,当指针运算符和++或者–结合时很容易分不清运算顺序,在这里总结一下,下面一共分析6中组合: * p++,(* p)++,* (p++),++* p,++( * p), * (++p)。 ...

c语言自增运算的汇编探究

出于对c语言编译链接过程的疑问,近段时间一直在看关于编译链接以及可执行文件加载方面的书.今晚忽然心血来潮,想看看对于自增运算gcc究竟如何编译,所以写了下面这段小程序验证一下(部分代码 环境 ubun...

c++自增自减运算汇总(经典)

c++自增自減問題  在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。变量i被称为“计数器”,用来记录完成某一操作的次数。C语言为这种计数器操作提供了两个更为简洁的运算...

多线程自增运算的原子性与可见性分析

很多程序的复杂性都是由于并发引起的,如果在并发情况下,如果对象是无状态那可以很好的运行,无论是在单线程还是多线程环境下都没问题,但是很多时候对象的状态是需要上下文维护的,因此在并发情况下就很容易导致不...

C语言中指针和自增运算符结合时的运算顺序问题

转载自: http://blog.csdn.net/xingjiarong/article/details/47071225 在C语言中,当指针运算符和++或者–结合时很容易分不清运算顺序,在这...

Lesson_for_java_day06--练习--if语句、for循环、运算表达式、自增运算等

练习题:
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)