c++中a+=b与a=a+b的区别

代码如下:
#include <iostream>
using namespace std;
int main() {
int a = 2;
int b = 3;
b += (++a)+(++a);
cout << b << endl;
}
输出结果是11。
如果将“b += (++a)+(++a)”改为“b = b+ (++a)+(++a)”则输出结果是10
这是什么原因

在C/C++中,操作符称为自反运算符(类似的还有+=、*=、/=、&=、|=等等),由前后两个符号无间隔组合而成;其核心意义由前一个符号确定,完成左边的变量与右边的变量的运算关系,后面的=号是把运算结果赋给左边的目标变量的意思。

扩展资料:

C语言便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。

由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-09-19

C语言作为一个大多编程人员入门的语言,我们常常说的C语言,从入门到入土。C语言是一种很严谨的面相机器的语言,因为机器是最“笨”的也是最“聪明”的,只有这样我们才能通过它们设计出任何一个我们想要的“虚拟世界”。

那么我们来看看“=”符号的应用。


“=”和“==”也许在大多人看来,“=”不就是等于号,为什么会有“==”这种两个等于号呢?其实这也是C语言特有的一种写法,一个等于和两个等于是代表着不同的含义。

一个“=”的意思赋值,什么叫赋值呢?

如a=1,b=3,c=5若a=b,c=a,则a=3,c=3。

如我们所见 a 的值为1,b 的值是3,c 的值是5,这些字母本来是没有意义的,因为有“=”,所以把后面的数字的值就给了字母,字母也就有了值。若 a=b 那么我们c语言就会把 b 的值给 a ,所以 a 的值变成了3,。

同时要注意的是,一个字符(如abc)只能有他们唯一一个值,所以之前 a 是1的值就被覆盖了。

好了我们来看看“==”的意义,双等于号的意思就是“等于”。

那么 a==b和b==a 有什么区别呢?这样的语句往往不会单独出现,常常出现在判断语句里面,如果 a 等于b 或是 b 等于 a,等于执行一种,不等于又执行不同的语句。

这两个没有什么太大的区别,唯一的区别是在判断的时候前面的那个字母占的比重多一些,a 是否等于 b,告诉我们 a 才是最重要的。


相信通过我的讲解大家对“=”的理解又加深了一层,希望能帮到大家。

第2个回答  2017-11-06
在vc2017下结果都是11
你大概用的是vc++6.0吧.
b += (++a)+(++a); vc6会先把(++a)+(++a)看作一个顺序点
就是这样的逻辑:
a=a+1;
a=a+1;
t=a+a; //方便描述弄个t
b=t+b;
结果就是11
b = b+ (++a)+(++a); vc6会先把b+(++a)看作一个顺序点
那就是这样的了:
a=a+1;
t=b+a;
a=a+1;
b=t+a;
结果是10
你把b = b+ (++a)+(++a)换成b = (++a)+(++a)+b; 应该又是11了
因为c/c++没有对顺序点(就是改变变量值的时间点)做硬性规定,所以不同的编译器可能会有不同的做法,但分号一定是一个顺序点。这个例子中11比较符合大多数人的预期。
这种表达式如果出现在商业软件开发当中,那作者就是想卷铺盖走人了。
但大学里考试时总有些脑子有水的喜欢出这些题。本回答被提问者采纳
第3个回答  2017-11-06
改成b = (++a)+(++a)+b肯定又成11了!道理自己先琢磨,弄不出来我再告诉你!追问

你说吧,就是琢磨不出来才来提问的

追答

你都采纳了我还说啥……

第4个回答  2017-11-06
不要在复杂式子里使用带有++的运算式子,这种行为的区别在于++的计算过程,研究这个完全没有意义,些这种代码页完全违背软件工程基本原则追问

这是考研题目,不是说要在平时的代码里写这样的语句,而是想要理解其中的计算过程

相似回答