C++运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++内置了丰富的运算符,并提供了以下类型的运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
算术运算符
下表显示了C++支持的所有算术运算符。假设变量A = 10;B = 20,则:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把连个操作数相加 | A+B=30 |
- | 从第一个操作数中减去第二个操作数 | A-B=-10 |
* | 把两个操作数相乘 | A*B=200 |
/ | 分子除以分母 | B/A=2 |
% | 取模运算符,整除后的余数 | B%A=0 |
++ | 自增运算符,整数值增加1 | A++将得到11 |
-- | 自减运算符,整数值减少1 | A--将得到9 |
实例:
#include<iostream>
using namespace std;
int main(){
int a = 20;
int b = 10;
int c;
c = a + b;
cout<<"Line 1 - c:"<<c<< endl;
c = a - b;
cout<<"Line 2 - c:"<<c<< endl;
c = a/b;
cout<<"Line 3 - c:"<<c<<endl;
c = a*b;
cout<<"Line 4 - c:"<<c<<endl;
c = a % b;
cout<<"Line 5 - c:"<<c<<endl;
c = a ++;
cout<<"Line 6 - c:"<<c<<endl;
c = a --;
cout<<"Line 7 - c:"<<c<<endl;
return 0;
}
结果显示:
关系运算符
下表显示了关系运算符。假设A = 10, B = 20;则:
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真 | (A==B)不为真 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真 | (A!=B)为真 |
> | 检查左操作数的值是否大于右操作数,如果是则条件为真 | (A>B)不为真 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真 | (A<B)为真 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真 | (A>=B)不为真 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真 | (A<=B)为真 |
实例:
#include<iostream>
using namespace std;
int main(){
int a = 21;
int b = 10;
int c;
if (a == b){
cout<<"Line 1 - a = b"<<endl;
}
else{
cout<<"Line 2 - a != b"<<endl;
}
if(a < b){
cout << "Line 3 - a < b"<<endl;
}
else{
cout<<"Line 4 - a is not smaller than b"<<endl;
}
a = 5;
b = 20;
if(a <= b){
cout<<"Line 5 - a <= b" <<endl;
}
if (b >= a){
cout<<"Line 6 - b >= a"<<endl;
}
return 0;
}
结果显示:
逻辑运算符
下表显示了C++支持的所有逻辑运算符,假设变量A = 1, 变量B = 0,则:
运算符 | 描述 | 实例 |
---|---|---|
&& | 逻辑与运算符,如果两个操作数都非零,则条件为真 | (A&&B)不为真 |
| | 逻辑或运算符,如果两个操作数中有任意一个非零,则条件为真 | |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为真,则逻辑非运算符将使其为假 | !(A&&B)为真 |
实例:
#include<iostream>
using namespace std;
int main(){
int a = 5;
int b = 20;
int c;
if(a && b){
cout<<"Line 1 - the contain is True "<<endl;
}
if(a||b){
cout<<"Line 2 - the contain is True"<<endl;
}
a = 0;
b = 10;
if(a && b){
cout<<"Line 3 - the contain is True"<<endl;
}
else{
cout<<"Line 4 - the contain is False"<<endl;
}
if (!(a&&b)){
cout<<"Line 5 - the contain is True"<<endl;
}
return 0;
}
位运算符
位运算符作用于位,并逐位执行操作。&、|和^的真值表如下:
p | q | p&q | p|q | p^q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设A= 60
, B= 13
现在以二进制格式表示,如下所示:
A= 00111100
B= 00001101
A & B = 00001100
A|B = 00111101
A^B = 00110001
~A = 1100 0011
下表显示C++支持的位运算符。假设A=60, B=13, 则:
运算符 | 描述 | 实例 |
---|---|---|
& | 如果同时存在于两个操作数中,二进制AND运算符复制一位到结果中 | (A&B)将得到12,即为0000 1100 |
| | 如果存在于任一操作数中,二进制OR运算符复制一位到结果中 | (A|B)将得到61,即为00111101 |
^ | 如果存在于其中一个操作数中单不同时存在于两个操作数中,二进制异或运算符复制一位到结果中 | (A^B)将得到49,即为00110001 |
~ | 二进制补码运算符是一元运算符,具有翻转位效果 | (A~B)将得到-61,即为0011000011,2的补码形式,带符号的二进制数 |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数 | A<<2将得到240,即为11110000 |
>> | 二进制右移动运算符。左操作数的值向右移动右操作数指定的位数 | A>>2将得到15,即为00001111 |
实例:
#include<iostream>
using namespace std;
int main(){
unsigned int a = 60;
unsigned int b = 13;
int c = 0;
c = a&b;
cout<<"Line 1 - c:"<<c<<endl;
c = a|b;
cout<<"Line 2 - c:"<<c<<endl;
c = a^b;
cout<<"Line 3 - c:"<<c<<endl;
c = ~a;
cout<<"Line 4 - c:"<<c<<endl;
c = a << 2;
cout<<"Line 5 - c:"<<c<<endl;
c = a >> 2;
cout<<"Line 6 - c:"<<c<<endl;
return 0;
}
结果显示:
赋值运算符
下表列出了C++支持的赋值运算符:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边的操作数 | C= A+B将把A+B的值赋给C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C+=A相当于C=C+A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C-=A相当于C=C-A |
*= | 乘且复制运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C=A相当于C=CA |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C/A相当于C=C/A |
%= | 求模且赋值运算符,求两个操作符的模赋值给左边操作符 | C%=A相当于C=C%A |
<<= | 左移且赋值运算符 | C<<=2等同于C=C<<2 |
>>= | 右移且赋值运算符 | C>>=2等同于C=C>>2 |
&= | 按位与且赋值运算符 | C&=2等同于C=C&2 |
^= | 按位异或且赋值运算符 | C=2等同于C=C2 |
|= | 按位或且赋值运算符 | C|=2等同于C=C|2 |
实例:
#include<iostream>
using namespace std;
int main(){
int a = 21;
int c;
c = a;
cout<<"Line 1 - = , c = "<< c <<endl;
c += a;
cout <<"Line 2 - +=, c = "<<c<<endl;
c -=a;
cout << "Line 3 - -=, c = "<<c<<endl;
c *= a;
cout<<"Line 4 - *=, c = "<<c<<endl;
c /= a;
cout<<"Line 5 - /=, c = "<<c<<endl;
c = 200;
c %= a;
cout <<"Line 6 - %=, c = "<<c<<endl;
c <<= 2;
cout <<"Line 7 - <<=, c = "<<c<<endl;
c >>= 2;
cout <<"Line 8 - >>=, c = "<<c<<endl;
c ^= 2;
cout<<"Line 9 - ^=, c = "<<c<<endl;
c |= 2;
cout <<"Line 10 - |=, c = "<<c<<endl;
return 0;
}
结果显示: