C++运算符
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 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为真,则逻辑非运算符将使其为假 | !(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=C^2 |
|= | 按位或且赋值运算符 | 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;
}
结果显示:
杂项运算符
下表列出了C++支持的其他一些重要的运算符
运算符 | 描述 |
---|---|
sizeof | sizeof运算符返回变量的大小,例如sizeof(a)将返回4,其中a为整型 |
Condition?X:Y | 条件运算符。如果Condition为真?则值为X;否则值为Y |
, | 逗号运算符会顺序执行一系列运算。整个逗号表达式的值以逗号分隔的列表中的最后一个表达式的值 |
.和-> | 成员运算符用于引用类结构和共用体的成员 |
Cast | 强制转换运算符把一种数据类型转换为另一种数据类型,例如int(2.2000)将返回2 |
& | 指针运算符&返回变量的地址。例如&a;将给出变量的实际地址 |
* | 指针运算符指向一个变量。例如var;将指向变量var |
C++中运算符的优先级
运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如乘除运算符具有比加减运算符更高的优先级。
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面,在表达式中,较高优先级的运算符会优先被计算。
运算符 | 描述 | 结合性 |
---|---|---|
后缀 | ()[].++-- | 从左到右 |
一元 | +-!~++--(type)*&sizeof | 从右到左 |
乘除 | */% | 从左到右 |
加减 | +- | 从左到右 |
移位 | <<>> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与ADD | & | 从左到右 |
位异或XOR | ^ | 从左到右 |
位或OR | | | 从左到右 |
逻辑与AND | && | 从左到右 |
逻辑或OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
实例
#include<iostream>
using namespace std;
int main(){
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a+b)*c/d;
cout<<"(a+b)*c/d:"<<e<<endl;
e = ((a+b)*c)/d;
cout<<"((a+b)*c)/d:"<<e<<endl;
e = (a+b)*(c/d);
cout<<"(a+b)*(c/d):"<<e<<endl;
e = a + (b*c)/d;
cout<<"a + (b*c)/d:"<<e<<endl;
return 0;
}
结果显示: