C++中的运算符总结(7):复合赋值运算符
复合赋值运算符将运算结果赋给左边的操作数。
请看下面的代码:
int num1 = 22;
int num2 = 5;
num1 += num2; // num1 contains 27 after the operation
其中最后一行代码与下面的代码等效:
num1 = num1 + num2;
因此运算符 += 的作用如下:将两个操作数相加,再将结果赋给左边的操作数( num1)。
下表列出了众多复合赋值运算符,并说明了其工作原理:
运算符 | 用法 | 等效于 |
---|---|---|
加法赋值运算符 | num1 += num2; | num1 = num1 + num2; |
减法赋值运算符 | num1 -= num2; | num1 = num1 - num2; |
乘法赋值运算符 | num1 *= num2; | num1 = num1 * num2; |
除法赋值运算符 | num1 /= num2; | num1 = num1 / num2; |
求模赋值运算符 | num1 %= num2; | num1 = num1 % num2; |
按位左移赋值运算符 | num1 <<= num2; | num1 = num1 << num2; |
按位右移赋值运算符 | num1 >>= num2; | num1 = num1 >> num2; |
按位 AND 赋值运算符 | num1 &= num2; | num1 = num1 & num2; |
按位 OR 赋值运算符 | num1 |= num2; | num1 = num1 | num2; |
按位 XOR 赋值运算符 | num1 ^= num2; | num1 = num1 ^ num2; |
以下程序演示了这些运算符的效果:
#include <iostream>
using namespace std;int main()
{cout << "Enter a number: ";int value = 0;cin >> value;value += 8;cout << "After += 8, value = " << value << endl;value -= 2;cout << "After -= 2, value = " << value << endl;value /= 4;cout << "After /= 4, value = " << value << endl;value *= 4;cout << "After *= 4, value = " << value << endl;value %= 1000;cout << "After %= 1000, value = " << value << endl;// Note: henceforth assignment happens within cout cout << "After <<= 1, value = " << (value <<= 1) << endl;cout << "After >>= 2, value = " << (value >>= 2) << endl;cout << "After |= 0x55, value = " << (value |= 0x55) << endl;cout << "After ^= 0x55, value = " << (value ^= 0x55) << endl;cout << "After &= 0x0F, value = " << (value &= 0x0F) << endl;return 0;
}
输出:
Enter a number: 440
After += 8, value = 448
After -= 2, value = 446
After /= 4, value = 111
After *= 4, value = 444
After %= 1000, value = 444
After <<= 1, value = 888
After >>= 2, value = 222
After |= 0x55, value = 223
After ^= 0x55, value = 138
After &= 0x0F, value = 10
分析:
在整个程序中,不断使用各种复合赋值运算符修改 value 的值。每次运算都使用了 value,并将结果赋给 value。因此,第 9 行将用户输入的值 440 加上 8,并将结果( 448)赋给 value。接下来,第 11 行将 448 减去 2,并将结果( 446)赋给 value。
该文章会更新,欢迎大家批评指正。
推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程