操作符是一个指示编译器执行特定数学或逻辑操作的符号。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 = 21;
int b = 10;
int c;
c = a + b;
cout << "Line 1 - Value of c is :" << c << endl;
c = a - b;
cout << "Line 2 - Value of c is :" << c << endl;
c = a * b;
cout << "Line 3 - Value of c is :" << c << endl;
c = a / b;
cout << "Line 4 - Value of c is :" << c << endl;
c = a % b;
cout << "Line 5 - Value of c is :" << c << endl;
c = a++;
cout << "Line 6 - Value of c is :" << c << endl;
c = a--;
cout << "Line 7 - Value of c is :" << c << endl;
return 0;
}
输出
Line 1 - Value of c is :31
Line 2 - Value of c is :11
Line 3 - Value of c is :210
Line 4 - Value of c is :2
Line 5 - Value of c is :1
Line 6 - Value of c is :21
Line 7 - Value of c is :22
关系操作符
关系操作符用于比较两个值或表达式。这些操作符返回一个布尔值——如果比较正确则为 true,否则为 false。
它们对于基于条件作出决策和控制程序流程至关重要。
以下是 C++ 支持的关系操作符:
假设变量 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;
if( a == b ) {
cout << "Line 1 - a is equal to b" << endl;
} else {
cout << "Line 1 - a is not equal to b" << endl;
}
if( a < b ) {
cout << "Line 2 - a is less than b" << endl;
} else {
cout << "Line 2 - a is not less than b" << endl;
}
if( a > b ) {
cout << "Line 3 - a is greater than b" << endl;
} else {
cout << "Line 3 - a is not greater than b" << endl;
}
a = 5;
b = 20;
if( a <= b ) {
cout << "Line 4 - a is either less than or equal to b" << endl;
}
if( b >= a ) {
cout << "Line 5 - b is either greater than or equal to b" << endl;
}
return 0;
}
输出
Line 1 - a is not equal to b
Line 2 - a is not less than b
Line 3 - a is greater than b
Line 4 - a is either less than or equal to b
Line 5 - b is either greater than or equal to b
逻辑操作符
逻辑操作符用于对布尔值(true 或 false)进行逻辑运算。这些操作符对于基于条件控制程序流程至关重要。C++ 中有三种主要的逻辑操作符,如下表所示:
假设变量 A 的值为 1,变量 B 的值为 0,那么:
操作符 |
描述 |
示例 |
&& |
称为逻辑与操作符。如果两个操作数均非零,则条件为真 |
(A && B) 为假 |
|
|
|
! |
称为逻辑非操作符。反转其操作数的逻辑状态。如果条件为真,则逻辑非操作符将其变为假 |
!(A && B) 为真 |
示例
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 20;
if(a && b) {
cout << "Line 1 - Condition is true" << endl;
}
if(a || b) {
cout << "Line 2 - Condition is true" << endl;
}
a = 0;
b = 10;
if(a && b) {
cout << "Line 3 - Condition is true" << endl;
} else {
cout << "Line 4 - Condition is not true" << endl;
}
if(!(a && b)) {
cout << "Line 5 - Condition is true" << endl;
}
return 0;
}
输出
Line 1 - Condition is true
Line 2 - Condition is true
Line 4 - Condition is not true
Line 5 - Condition is true
位操作符
位操作符用于对整数数据类型进行位级操作。这些操作直接在位上进行,如低位编程、图形处理和密码学中的应用。
位操作符在位级别上工作并对位进行逐位操作。以下是 &、|、^ 的真值表:
p |
q |
p & q |
p |
q |
p ^ q |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
假设 A = 60;B = 13;现在在二进制格式下它们将是:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
以下是 C++ 支持的位操作符:
假设变量 A 的值为 60,变量 B 的值为 13,那么:
操作符 |
描述 |
示例 |
& |
二进制与操作符将一个位复制到结果中,如果它存在于两个操作数中 |
(A & B) 给出 12,即 0000 1100 |
|
|
二进制或操作符将一个位复制到结果中,如果它存在于任一操作数中 |
^ |
二进制异或操作符将一个位复制到结果中,如果它仅在一个操作数中设置 |
(A ^ B) 给出 49,即 0011 0001 |
~ |
二进制取反操作符是单目操作符,具有“翻转”位的效果 |
(~A) 给出 -61,即 1100 0011 在二进制补码形式下由于是一个有符号的二进制数 |
<< |
二进制左移操作符。左操作数的值向左移动由右操作数指定的位数 |
A << 2 给出 240,即 1111 0000 |
>> |
二进制右移操作符。左操作数的值向右移动由右操作数指定的位数 |
A >> 2 给出 15,即 0000 1111 |
一、赋值操作符
赋值操作符用于给变量分配值。这些操作符允许您设置或更新存储在变量中的值。
以下是 C++ 支持的赋值操作符:
操作符 |
描述 |
示例 |
= |
简单赋值操作符,将右侧操作数的值赋给左侧操作数 |
C = A + B 将把 A + B 的值赋给 C |
+= |
加和赋值操作符,将右侧操作数加到左侧操作数并将结果赋给左侧操作数 |
C += A 等同于 C = C + A |
-= |
减和赋值操作符,将右侧操作数从左侧操作数中减去并将结果赋给左侧操作数 |
C -= A 等同于 C = C - A |
*= |
乘和赋值操作符,将右侧操作数与左侧操作数相乘并将结果赋给左侧操作数 |
C *= A 等同于 C = C * A |
/= |
除和赋值操作符,将左侧操作数除以右侧操作数并将结果赋给左侧操作数 |
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 |
|
= |
位或赋值操作符 |
示例
#include <iostream>
using namespace std;
int main() {
int a = 21;
int c;
c = a;
cout << "Line 1 - = Operator, Value of c = : " << c << endl;
c += a;
cout << "Line 2 - += Operator, Value of c = : " << c << endl;
c -= a;
cout << "Line 3 - -= Operator, Value of c = : " << c << endl;
c *= a;
cout << "Line 4 - *= Operator, Value of c = : " << c << endl;
c /= a;
cout << "Line 5 - /= Operator, Value of c = : " << c << endl;
c = 200;
c %= a;
cout << "Line 6 - %= Operator, Value of c = : " << c << endl;
c <<= 2;
cout << "Line 7 - <<= Operator, Value of c = : " << c << endl;
c >>= 2;
cout << "Line 8 - >>= Operator, Value of c = : " << c << endl;
c &= 2;
cout << "Line 9 - &= Operator, Value of c = : " << c << endl;
c ^= 2;
cout << "Line 10 - ^= Operator, Value of c = : " << c << endl;
c |= 2;
cout << "Line 11 - |= Operator, Value of c = : " << c << endl;
return 0;
}
输出
Line 1 - = Operator, Value of c = : 21
Line 2 - += Operator, Value of c = : 42
Line 3 - -= Operator, Value of c = : 21
Line 4 - *= Operator, Value of c = : 441
Line 5 - /= Operator, Value of c = : 21
Line 6 - %= Operator, Value of c = : 11
Line 7 - <<= Operator, Value of c = : 44
Line 8 - >>= Operator, Value of c = : 11
Line 9 - &= Operator, Value of c = : 2
Line 10 - ^= Operator, Value of c = : 0
Line 11 - |= Operator, Value of c = : 2
其他操作符
其他操作符通常称为“杂项操作符”,包括各种不符合算术或逻辑操作符类别的操作符。以下是一些常见的杂项操作符及其定义:
序号 |
操作符 & 描述 |
1 |
sizeof |
2 |
条件 ? X : Y |
3 |
, |
4 |
. (点) 和 -> (箭头) |
5 |
类型转换 |
6 |
& |
7 |
* |
条件(三元)操作符 (?:)
这是一个简短的方式来执行 C++ 中的条件评估。
int a = 10, b = 20;
int result = (a > b) ? a : b;
cout << "The greater value is: " << result << endl;
输出
The greater value is: 20
sizeof
操作符
sizeof
操作符返回变量或数据类型的字节大小。
int x = 5;
cout << "Size of int: " << sizeof(x) << " bytes" << endl;
cout << "Size of double: " << sizeof(double) << " bytes" << endl;
输出
4
8
位取反操作符 (~)
位取反操作符对操作数的位进行反转。
unsigned int num = 5;
unsigned int result = ~num;
cout << "Bitwise complement of 5: " << result << endl;
域解析操作符 (::)
此操作符用于定义函数或变量的作用域,特别是在类和命名空间上下文中。
class MyClass {
public:
static int value;
};
int MyClass::value = 10;
cout << "Static value: " << MyClass::value << endl;
输出
10
C++ 中的操作符优先级
操作符优先级决定了表达式中项的分组方式。这影响了表达式的评估方式。某些操作符的优先级高于其他操作符;例如,乘法操作符的优先级高于加法操作符。
在表达式中,优先级较高的操作符将首先被评估。
类别 |
操作符 |
结合性 |
后置 |
() [] -> . ++ -- |
从左到右 |
单目 |
+ - ! ~ ++ -- (类型)* & sizeof |
从右到左 |
乘法 |
* / % |
从左到右 |
加法 |
+ - |
从左到右 |
移位 |
<< >> |
从左到右 |
关系 |
< <= > >= |
从左到右 |
等于 |
== != |
从左到右 |
位与 |
& |
从左到右 |
位异或 |
^ |
从左到右 |
位或 |
` |
` |
逻辑与 |
&& |
从左到右 |
逻辑或 |
` |
|
条件 |
?: |
从右到左 |
赋值 |
`= += -= *= /= %>= <<= &= ^= |
=` |
逗号 |
, |
从左到右 |
示例
#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 << "Value of (a + b) * c / d is :" << e << endl;
e = ((a + b) * c) / d;
cout << "Value of ((a + b) * c) / d is :" << e << endl;
e = (a + b) * (c / d);
cout << "Value of (a + b) * (c / d) is :" << e << endl;
e = a + (b * c) / d;
cout << "Value of a + (b * c) / d is :" << e << endl;
return 0;
}
输出
Value of (a + b) * c / d is :90
Value of ((a + b) * c) / d is :90
Value of (a + b) * (c / d) is :90
Value of a + (b * c) / d is :50