主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
C++

C++ 基础

C++ 主页
C++ 概述
C++ 环境
C++ 基本语法
C++ 注释
C++ 数据类型
C++ Hello, World
C++ 省略命名空间
C++ 数值类型
C++ 字符类型
C++ 布尔类型
C++ 变量
C++ 作用域
C++ 多个变量
C++ 输入输出基础
C++ 常量/文字
C++ 修饰符类型
C++ 存储类别
C++ 操作符
C++ 决策结构
C++ 循环结构
C++ foreach 循环
C++ 数字
C++ 数组
C++ 指针
C++ 枚举类型
C++ 引用变量
C++ 日期与时间
C++ 结构体
C++ 联合类型

C++ 字符串

C++ 字符串
C++ 字符串长度
C++ 字符串连接

C++ 函数

C++ 函数
C++ 多参数函数
C++ 递归
C++ return 语句
C++ 函数重载
C++ 函数重写

C++ 面向对象

C++ 面向对象
C++ 类和对象
C++ 多重继承
C++ 多层次继承
C++ 继承
C++ 重载
C++ 多态性
C++ 抽象
C++ 封装
C++ 接口

C++ 高级

C++ 文件和流
C++ 异常处理
C++ 动态内存
C++ 命名空间
C++ 模板
C++ 预处理器
C++ 信号量
C++ 多线程
C++ Web 编程
C++ 高级概念

基础

C++ 主页
C++ 概述
C++ 环境
C++ 基本语法
C++ 注释
C++ 数据类型
C++ Hello, World
C++ 省略命名空间
C++ 数值类型
C++ 字符类型
C++ 布尔类型
C++ 变量
C++ 作用域
C++ 多个变量
C++ 输入输出基础
C++ 常量/文字
C++ 修饰符类型
C++ 存储类别
C++ 操作符
C++ 决策结构
C++ 循环结构
C++ foreach 循环
C++ 数字
C++ 数组
C++ 指针
C++ 枚举类型
C++ 引用变量
C++ 日期与时间
C++ 结构体
C++ 联合类型

字符串

C++ 字符串
C++ 字符串长度
C++ 字符串连接

函数

C++ 函数
C++ 多参数函数
C++ 递归
C++ return 语句
C++ 函数重载
C++ 函数重写

面向对象

C++ 面向对象
C++ 类和对象
C++ 多重继承
C++ 多层次继承
C++ 继承
C++ 重载
C++ 多态性
C++ 抽象
C++ 封装
C++ 接口

高级

C++ 文件和流
C++ 异常处理
C++ 动态内存
C++ 命名空间
C++ 模板
C++ 预处理器
C++ 信号量
C++ 多线程
C++ Web 编程
C++ 高级概念

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 = 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;  // 结果将是 20 因为 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;  // 二进制表示:00000000 00000000 00000000 00000101
unsigned int result = ~num;  // 二进制表示:11111111 11111111 11111111 11111010
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;      // ( 30 * 15 ) / 5
   cout << "Value of (a + b) * c / d is :" << e << endl;

   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   cout << "Value of ((a + b) * c) / d is  :" << e << endl;

   e = (a + b) * (c / d);   // (30) * (15/5)
   cout << "Value of (a + b) * (c / d) is  :" << e << endl;

   e = a + (b * c) / d;     //  20 + (150/5)
   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
上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图