C++学习第五弹:运算符

youziawa 发布于 2025-08-30 80 次阅读


运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。包括以下几种:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

算数运算符

运算符描述
+把两个操作数相加
-从第一个操作数中减去第二个操作数
*把两个操作数相乘
/分子除以分母
%取模运算符,整除后的余数
++自增运算符,整数值增加 1
--自减运算符,整数值减少 1

前几个比较好理解,对于自增/自减运算符给出如下实例:

int a=1,b=1;
a++;
b--;

此时a=2,b=0。

关系运算符

运算符描述
==检查两个操作数的值是否相等,如果相等则条件为真。
!=检查两个操作数的值是否相等,如果不相等则条件为真。
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。

这个跟小学数学都一样,不再赘述。要注意的是,“==”一定不要少打成赋值“=”号。

逻辑运算符

运算符描述
&&称为逻辑与运算符。如果两个操作数都 true,则条件为 true。
||称为逻辑或运算符。如果两个操作数中有任意一个 true,则条件为 true。
!称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。

逻辑与运算符与py中的“and”是一样的,用于判断条件同时成立,只有两都为true才输出true;
逻辑或运算符与py中的“or”是一样的,只要有一个true就输出true;

位运算符

位运算符作用于位,并逐位执行操作。(这个理解起来稍微麻烦一点,下面会详细解释一下)
假设A=60;B=13。则有二进制:A = 0011 1100;B = 0000 1101。

运算符描述实例
&按位与操作,按二进制位进行"与"运算。运算规则:
0&0=0; 0&1=0; 1&0=0; 1&1=1;
(A & B) 将得到 12,即为:
0000 1100
|按位或运算符,按二进制位进行"或"运算。运算规则:
0|0=0; 0|1=1; 1|0=1; 1|1=1;
(A | B) 将得到 61,即为:
0011 1101
^异或运算符,按二进制位进行"异或"运算。运算规则:
0^0=0; 0^1=1; 1^0=1; 1^1=0;
(A ^ B) 将得到 49,即为:
0011 0001
~取反运算符,按二进制位进行"取反"运算。运算规则:
~1=-2; ~0=-1;
(~A ) 将得到 -61,即为:
1100 0011,
一个有符号二进制数的补码形式。
<<二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。A << 2 将得到 240,即为:
1111 0000
>>二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。A >> 2 将得到 15,即为:
0000 1111

下面引用一下菜鸟教程中的实例代码,更加直观地展示一下:

#include <iostream>
using namespace std;
 
int main()
{
   unsigned int a = 60;      // 60 = 0011 1100  
   unsigned int b = 13;      // 13 = 0000 1101
   int c = 0;           
 
   c = a & b;             // 12 = 0000 1100
   cout << "Line 1 - c 的值是 " << c << endl ;
 
   c = a | b;             // 61 = 0011 1101
   cout << "Line 2 - c 的值是 " << c << endl ;
 
   c = a ^ b;             // 49 = 0011 0001
   cout << "Line 3 - c 的值是 " << c << endl ;
 
   c = ~a;                // -61 = 1100 0011
   cout << "Line 4 - c 的值是 " << c << endl ;
 
   c = a << 2;            // 240 = 1111 0000
   cout << "Line 5 - c 的值是 " << c << endl ;
 
   c = a >> 2;            // 15 = 0000 1111
   cout << "Line 6 - c 的值是 " << c << endl ;
 
   return 0;
}

输出结果:

Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15

赋值运算符

使用赋值运算符时要注意:操作数类型要匹配,变量要进行初始化,以及运算符的优先级等问题。

基本赋值运算符:

作用很简单,就是将右侧表达式的值赋给左侧变量。

运算符描述实例
=简单的赋值运算符,把右边操作数的值赋给左边操作数C = A + B 将把 A + B 的值赋给 C

下面简单举个例子:

int A = 5;
int B = 6;
int C = A+B; //此时,C=11

复合赋值运算符:

算术类复合赋值运算符:

运算符描述等价形式
+=加且赋值运算符:
把右边操作数加上左边操作数的结果赋值给左边操作数
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
|=按位或且赋值运算符C |= 2 等同于 C = C | 2

杂项运算符

运算符描述
sizeofsizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。
Condition ? X : Y条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。
,逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
.(点)和 ->(箭头)成员运算符用于引用类、结构和共用体的成员。
Cast强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。
&指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。
*指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。

C++ 中的运算符优先级

使用运算符时,请务必注意运算符优先级。
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。

类别 运算符 结合性 
后缀 () [] -> . ++ - -  从左到右 
一元 + - ! ~ ++ - - (type)* & sizeof 从右到左 
乘除 * / % 从左到右 
加减 + - 从左到右 
移位 << >> 从左到右 
关系 < <= > >= 从左到右 
相等 == != 从左到右 
位与 AND 从左到右 
位异或 XOR 从左到右 
位或 OR 从左到右 
逻辑与 AND && 从左到右 
逻辑或 OR || 从左到右 
条件 ?: 从右到左 
赋值 = += -= *= /= %=>>= <<= &= ^= |= 从右到左 
逗号 从左到右 

小结:了解了c++大部分运算符的使用方法。