-=,+=混合运算详解

+=与-=运算符混合计算解析:

int x = 3;

x += x -= x -= x += x -= x;

详解:算数运算按运算符优先级运算,从右至左计算。

1. x=x-x; 实际为 3 - 3 计算结果为0;

2. x=x+x; 实际为 3 - 0,0是第1步结果,计算结果为3;

3. x=x-x; 实际为 3 - 3,3是第2步结果,计算结果为0;

4. x=x-x; 实际为 3 - 0,0是第3步结果,计算结果为3;

5. x=x+x; 实际为 3 + 3,3是第4步结果,计算结果为6。

表达简化后:x=x+(x-(x-(x+(x-x))));

总结:表达式里面运算符优先级相同,显示x初始值都为3,从右到左计算,最终x为6.

*,+,+=,-=运算符混合计算解析:

int y = 4;

y += y * (y += y) + y + y *
(y -= y + 1);

详解:算数运算符等级:

等级    符号    名词                 结合性

1         ()        圆括号              从左到右

3          *           乘                  从左到右

4         +           加                  从左到右

14      +=   混合赋值运算符    从右到左

14      -=    混合赋值运算符    从右到左

按运算符规则计算:

1.分析先计算+=的右边y * (y += y)
+ y + y * (y -= y + 1);

2.分析从左至右分解y * (y += y) + y + y * (y -= y + 1);

3.最先计算y * (y += y)。最终分析步骤如下:

1,2:y*(y=y+y);实际为4*(4+4),计算结果为32,y=8;

3:32+y;实际为32+8,计算结果为40,y=8;

4,5,6:y*(y-=y+1);实际为8*(8-(8+1)),计算结果为-8,y=-1;

7:40+(-8),计算结果为32.y=-1;

8:y=y+32 ,实际为4+32,计算结果为36,y=-1.

最终y结果为36.表达式简化后:y=y + y * (y = y+y) + y + y*(y = y
- (y+1));

总结:熟悉运算符优先等级,按步骤解析表达式一步一步计算。注意-=,+=计算后会修改掉变量的值。

  备注:

  作者:Sam Jason

  博客:http://www.cnblogs.com/zengming/

  本文是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。
<欢迎有不同想法或见解的同学一起探讨,共同进步>

时间: 2024-10-05 01:06:11

-=,+=混合运算详解的相关文章

Qt Quick 之 QML 与 C++ 混合编程详解

Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可用,要么用起来不方便,所以呢,很多时候我们是会基于这样的原则来混合使用 QML 和 C++: QML 构建界面, C++ 实现非界面的业务逻辑和复杂运算. 请给

c语言位运算详解

位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表: 运算符含义描述 & 按位与      如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或      两个相应的二进制位中只要有一个为1,该位的结果值为1 ^ 按位异或    若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反        ~

Flex布局新旧混合写法详解(兼容微信)

flex是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 Flex 的支持都不是很好,这里针对微信内置浏览器写了一套兼容写法.下面入正题. 首先还是从两个版本的语法开始讲吧,这里还是假设flex容器为 .box ,子元素为 .item . 旧语法篇 定义容器的display属性 .box{ display: -moz-box; /*Firefox*/ display: -we

QML与C++混合编程详解

1.QML与C++为什么要混合编程 QML与C++为什么要混合编程,简单来说,就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法,下面介绍了两者间交互的方法与技巧. 2.QML访问C++概述 Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C++中得到扩展,在一定的条件下,QML就可以访问QObject派生类的成员,例如信号.槽函数.枚举类型.属性.成员函数等. QML访问C++有两个方法:一是在Qt元对象系统中注册C++类,在QML中实例化.访问.二是在C++中实例

hive数学运算详解

1. 加法操作: + 语法: A + B 操作类型:所有数值类型 说明:返回A与B相加的结果.结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系).比如,int + int 一般结果为int类型,而int + double 一般结果为double类型 举例: hive> select1 + 9 from lxw_dual; 10 hive> createtable lxw_dual as select 1 + 1.2 from lxw_dual; hive>desc

hive关系运算详解

关系运算:1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive>select 1 from lxw_dual where 1=1; 2. 不等值比较: <> 语法: A <> B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL:如果表达式A与表达式B不相等,则为TRUE:否则为FALSE 举例: hive> select1 from

C语言位运算详解(转载)

转载自:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作 运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型.C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结

Scala前缀,中缀及后缀运算详解

语法: PostfixExpr ::= InfixExpr [id [nl]] InfixExpr ::= PrefixExpr | InfixExpr id [nl] Inf2424ixExpr PrefixExpr ::= [?-? | ?+? | ?!? | ?~?] SimpleExpr 表达式由算符和操作数构成. 6.12.1. 前缀运算 前缀运算op e由前缀算符op(必须是?+?, ?-?, ?!?或?~?之一).表达式op e等价于后缀方法应用e.unary_op. 前缀算符不同

shell scripts之算数运算详解

算数运算符如下: 运算操作符与运算命令: 1.双小括号"( ( ) )"数值运算命令 双小括号" ( ( ) ) "的作用是进行数值运算与数值比较,它的效率最高,用法灵活,是经常被采用的运算操作符,其操作方法如下: 执行echo$((a++))和echo$((a--))命令输出整个表达式时,输出的值即为a的值,表达式执行完毕后,会对a进行++.--的运算,而执行echo$((++a))和echo$((--a))命令输出整个表达式时,会先对a进行++.--的运算,然后