C++ 运算符

在本教程中,我们将借助示例学习C ++中不同类型的运算符。 在编程中,运算符是对值或变量进行运算的符号。

运算符是对变量和值执行运算的符号。例如,+是用于加法的运算符,而 - 是用于减法的运算符。

C ++中的运算符可以分为六种类型:

  1. 算术运算符

  2. 赋值运算符

  3. 关系运算符

  4. 逻辑运算符

  5. 按位运算符

  6. 其他运算符

1. C ++算术运算符

算术运算符用于对变量和数据执行算术运算。例如,

a + b;

在此,+运算符用于将两个变量a和b相加。同样,C ++中还有其他各种算术运算符。

假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符描述实例
+把两个操作数相加A + B 将得到 30
-从第一个操作数中减去第二个操作数A - B 将得到 -10
*把两个操作数相乘A * B 将得到 200
/分子除以分母B / A 将得到 2
%取模运算符,整除后的余数B % A 将得到 0
++自增运算符,整数值增加 1A++ 将得到 11
--自减运算符,整数值减少 1A-- 将得到 9

示例1:算术运算符

#include <iostream>
using namespace std;

int main() {
    int a, b;
    a = 7;
    b = 2;

    // 打印a和b的和
    cout << "a + b = " << (a + b) << endl;

    // 打印a和b的差
    cout << "a - b = " << (a - b) << endl;

    // 打印a和b的乘积
    cout << "a * b = " << (a * b) << endl;

    // 打印a除以b
    cout << "a / b = " << (a / b) << endl;

    // 打印a和b的模(余数)
    cout << "a % b = " << (a % b) << endl;

    return 0;
}

输出结果

a + b = 9
a - b = 5
a * b = 14
a / b = 3
a % b = 1

在这里,运算符+、- 和 * 分别计算加法、减法和乘法,正如我们所期望的那样。

/ 除法运算符

注意我们程序中的操作(a / b)。  / 运算符是除法运算符。

从上面的示例可以看到,如果一个整数除以另一个整数,我们将得到商。但是,如果除数或被除数是浮点数,我们将以小数形式得到结果。

在C++中,

7/2 = 3
7.0 / 2 = 3.5
7 / 2.0 = 3.5
7.0 / 2.0 = 3.5

% 模运算符

模运算符 % 计算余数。当a (9)除以b(4),余数为1

注意:%操作只能与整数使用。

自增和自减运算符

C ++还分别提供了递增和递减运算符:++和--。

++将操作数的值增加1

-- 将操作数的值减少1

例如,

int num = 5;

// num增加1
++num;

这里,num的值从初始值5增加到6。

示例2:增量和减量运算符

// 递增和递减运算符的工作

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 100, result_a, result_b;

    // 将a加1并将结果存储在result_a中
    result_a = ++a;
    cout << "result_a = " << result_a << endl;


    // 将b减1并将结果存储在result_b中
    result_b = --b;
    cout << "result_b = " << result_b << endl;

    return 0;
}

输出结果

result_a = 11
result_b = 99

在上面的程序中,我们使用++和-运算符作为前缀。 我们还可以将这些运算符用作后缀。

这些运算符用作前缀与用作后缀时略有不同。

2. C ++ 赋值运算符

在C ++中,赋值运算符用于将值赋给变量。例如,

// 将5赋值给a
a = 5;

这里,我们给变量a赋了一个值5。

运算符
实例等同
=a = b;a = b;
+=a += b;a = a + b;
-=a -= b;a = a - b;
*=a *= b;a = a * b;
/=a /= b;a = a / b;
%=a %= b;a = a % b;

示例2:赋值运算符

#include <iostream>
using namespace std;

int main() {
    int a, b, temp;

    // a赋值2
    a = 2;

    //b赋值7
    b = 7;

   // 将a的值分配给temp
   temp = a;    // temp将为 2
   cout << "temp = " << temp << endl;

    // 把a和b的和赋值给a
    a += b;       // a = a +b
    cout << "a = " << a << endl;

    return 0;
}

输出结果

temp = 2
a = 9

3. C ++关系运算符

关系运算符用于检查两个操作数之间的关系。例如,

// 检查a是否大于b
a > b;

在这里,>是一个关系运算符。它检查是否a大于b。

如果该关系为true,则返回1;如果该关系为false,则返回0

假设变量 A 的值为 5,变量 B 的值为 11,则:

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

示例4:关系运算符

#include <iostream>
using namespace std;

int main() {
    int a, b;
    a = 3;
    b = 5;
    bool result;

    result = (a == b);   // false
    cout << "3 == 5 计算结果为 " << result << endl;

    result = (a != b);  // true
    cout << "3 != 5 计算结果为 " << result << endl;

    result = a > b;   // false
    cout << "3 > 5 计算结果为 " << result << endl;

    result = a < b;   // true
    cout << "3 < 5 计算结果为 " << result << endl;

    result = a >= b;  // false
    cout << "3 >= 5 计算结果为 " << result << endl;

    result = a <= b;  // true
    cout << "3 <= 5 计算结果为 " << result << endl;

    return 0;
}

输出结果

3 == 5 计算结果为 0
3 != 5 计算结果为 1
3 > 5 计算结果为 0
3 < 5 计算结果为 1
3 >= 5 计算结果为 0
3 <= 5 计算结果为 1

注意:关系运算符用于决策和循环。

4. C ++逻辑运算符

逻辑运算符用于检查表达式是true还是false。如果表达式为true,则返回1;如果表达式为false,则返回0

p>假设变量 A 的值为 1,变量 B 的值为 0,则:

运算符描述实例
&&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(A || B) 为真。
!称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

在C ++中,逻辑运算符通常用于决策制定。为了进一步了解逻辑运算符,让我们看下面的示例,

假设,
a = 5
b = 8

假如,

(a > 3) && (b > 5) 计算结果为 true
(a > 3)  && (b < 5) 计算结果为 false

(a > 3) || (b > 5) 计算结果为 true
(a > 3) || (b < 5) 计算结果为 true
(a < 3) || (b < 5) 计算结果为 false

!(a == 3) 计算结果为 true
!(a > 3) 计算结果为 false

示例5:逻辑运算符

#include <iostream>
using namespace std;

int main() {
    bool result;

    result = (3 != 5) && (3 < 5);     // true
    cout << "(3 != 5) && (3 < 5) 计算结果为 " << result << endl;

    result = (3 == 5) && (3 < 5);    // false
    cout << "(3 == 5) && (3 < 5) 计算结果为 " << result << endl;

    result = (3 == 5) && (3 > 5);    // false
    cout << "(3 == 5) && (3 > 5) 计算结果为 " << result << endl;

    result = (3 != 5) || (3 < 5);    // true
    cout << "(3 != 5) || (3 < 5) 计算结果为 " << result << endl;

    result = (3 != 5) || (3 > 5);    // true
    cout << "(3 != 5) || (3 > 5) 计算结果为 " << result << endl;

    result = (3 == 5) || (3 > 5);    // false
    cout << "(3 == 5) || (3 > 5) 计算结果为 " << result << endl;

    result = !(5 == 2);    // true
    cout << "!(5 == 2) 计算结果为 " << result << endl;

    result = !(5 == 5);    // false
    cout << "!(5 == 5) 计算结果为 " << result << endl;

    return 0;
}

输出结果

(3 != 5) && (3 < 5) 计算结果为 1
(3 == 5) && (3 < 5) 计算结果为 0
(3 == 5) && (3 > 5) 计算结果为 0
(3 != 5) || (3 < 5) 计算结果为 1
(3 != 5) || (3 > 5) 计算结果为 1
(3 == 5) || (3 < 5) 计算结果为 0
!(5 == 2) 计算结果为 1
!(5 == 5) 计算结果为 0

逻辑运算符程序的用法

  • (3!= 5)&&(3 <5)求值为1,因为两个操作数(3!= 5)和(3 <5)均为1(true)。

  • (3 == 5)&&(3 <5)求值为0,因为操作数(3 == 5)为0(false)。

  • (3 == 5)&&(3> 5)求值为0,因为两个操作数(3 == 5)和(3> 5)均为0(false)。

  • (3!= 5)||(3 <5)求值为1,因为两个操作数(3!= 5)和(3 <5)均为1(true)。

  • (3!= 5)||(3> 5)求值为1,因为操作数(3!= 5)为1(true)。

  • (3 == 5)||(3> 5)求值为0,因为两个操作数(3 == 5)和(3> 5)均为0(false)。

  • !(5 == 2)求值为1,因为操作数(5 == 2)为0(false)。

  • !(5 == 5)求值为0,因为操作数(5 == 5)为1(true)。

5. C ++按位运算符

在C ++中,按位运算符用于对单个位执行操作。 它们只能与char和int数据类型一起使用。

下表显示了 C++ 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

运算符描述实例
&如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。(A & B) 将得到 12,即为 0000 1100
|如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。(A | B) 将得到 61,即为 0011 1101
^如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。(A ^ B) 将得到 49,即为 0011 0001
~二进制补码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<<二进制左移运算符。左操作数的值向左移动右操作数指定的位数。A << 2 将得到 240,即为 1111 0000
>>二进制右移运算符。左操作数的值向右移动右操作数指定的位数。A >> 2 将得到 15,即为 0000 1111

要了解更多信息,请访问C ++按位运算符

除了上面讨论的运算符,也有一些其他运算符,如sizeof,?,.,&等,它们不能被整齐地划分为一个或另一个类型。我们将在以后的教程中学习更多关于这些操作符的内容。

杂项运算符

下表列出了 C++ 支持的其他一些重要的运算符。

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

C++ 中的运算符优先级

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。

例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。

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

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

示例:运算符优先级

#include <iostream>
using namespace std;

int main() {

  // 先求出17 * 6
  int num1 = 5 - 17 * 6;

  // 与num1等效的表达式
  int num2 = 5 - (17 * 6);

  // 强制编译器先求5 - 17的值
  int num3 = (5 - 17) * 6;

  cout << "num1 = " << num1 << endl;
  cout << "num2 = " << num2 << endl;
  cout << "num3 = " << num3 << endl;

  return 0;
}

输出结果:

num1 = -97
num2 = -97
num3 = -72

注意:由于C ++中有很多运算符具有多个优先级,因此强烈建议我们使用括号使代码更具可读性。

相关推荐:C++ 运算符优先级和关联性