C++按位异或运算符的使用介绍

咖啡半糖
咖啡半糖
发布时间:2026-10-14| 4人浏览过
原创

在C++中,按位异或(XOR)是处理二进制数据的强大工具。本文将解析其"相同为0,不同为1"的核心逻辑,并演示如何通过该运算符实现高效的数值交换、特定位翻转及数据校验,帮助开发者深入理解底层位操作。

异或运算的基本原理

C++中的按位异或运算符符号为 ^。其运算规则基于二进制位:

  • 当两个对应位相同时,结果为 0;
  • 当两个对应位不同时,结果为 1。

基本真值表如下:

  • 0 ^ 0 = 0
  • 0 ^ 1 = 1
  • 1 ^ 0 = 1
  • 1 ^ 1 = 0

例如,对十六进制数 0xA1 (二进制 10100001) 和 0x11 (二进制 00010001) 进行异或运算:
10100001 ^ 00010001 = 10110000 (即十六进制 0xB0)。

异或运算的关键特性

理解以下三条数学性质是应用异或的基础:

  1. 恒等律:0 ^ N = N。任何数与0异或,结果仍为其本身。
  2. 归零律:1 ^ N = ~N(在单比特语境下指取反)。1异或某位会将该位翻转(0变1,1变0)。
  3. 自反性:N ^ N = 0。任何数与自己异或结果为0。推论:A ^ B ^ B = A,即两次异或同一数会恢复原值。

常见应用场景

第1步:实现两个变量的数值交换

异或最著名的应用是不使用临时变量交换两个整数的值。假设要交换整数 a 和 b:

a = 10100001; // 假设值 A
b = 00000110; // 假设值 B

执行以下三步:

  1. a = a ^ b;
    此时 a 变为 10100111 (A XOR B)。
  2. b = b ^ a;
    即 B ^ (A ^ B) = A ^ (B ^ B) = A ^ 0 = A。
    此时 b 变为原始 a 的值 10100001。
  3. a = a ^ b;
    即 (A ^ B) ^ A = B ^ (A ^ A) = B ^ 0 = B。
    此时 a 变为原始 b 的值 00000110。

完成判断:最终 a 获得原 b 的值,b 获得原 a 的值,无需额外内存空间。

第2步:特定位翻转(Masking)

若需将某个数的特定二进制位翻转,可构造一个“掩码”并与原数异或。掩码中需要翻转的位设为1,其余位设为0。

示例:将 10100001 的第2位和第3位(从右往左,从1开始计数,即bit index 1和2)翻转。

  • 目标位位置为第2、3位,对应的掩码应为 00000110 (即十进制的6,十六进制0x06)。
  • 运算过程:
   10100001  (原数)
^  00000110  (掩码: 仅第2、3位为1)
-----------
   10100111  (结果: 第2、3位已翻转)

此方法常用于配置寄存器位域或简单的加密混淆。

第3步:奇偶校验与数据完整性

由于自反性 (A ^ B ^ B = A),异或常用于生成校验和。发送端对数据块进行连续异或得到一个校验值,接收端对所有数据(含校验值)再进行一次异或,若结果为0则表明传输无误。这在串口通信或文件校验中较为常见。

注意事项

虽然异或交换变量节省了一个临时变量,但在现代编译器优化和高性能场景中,直接引入临时变量通常更清晰且可能产生同等或更优的代码效率。此外,对于浮点数或结构体,不能直接使用此方法交换值,因为位模式不等于数值意义。

以上就是C++按位异或运算符的详细使用指南,更多关于C++位运算技巧的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。