波拿巴:机械化革命免安装绿色中文版
2.57G · 2025-11-16
在 C++ 中,位运算符用于对整数类型的二进制位进行操作,包括与(&)、或(|)、异或(^) 等。它们直接作用于内存中的二进制位,运算效率极高,常用于底层编程(如驱动开发、嵌入式)、数据压缩、加密等场景。以下是详细解析:
位运算的操作对象是整数的二进制补码形式(C++ 中整数默认以补码存储),运算时按“位对齐”,逐位进行操作(不影响其他位)。
例如,对整数 a = 6(二进制 0110)和 b = 11(二进制 1011)进行位运算时,对齐方式如下:
a: 0110
b: 1011
---------- (按位操作)
结果: xxxx
运算规则:两位都为 1 时,结果为 1;否则为 0(同真为真)。
1 & 1 = 1,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0。
int a = 6; // 二进制:0110
int b = 11; // 二进制:1011
int c = a & b; // 0110 & 1011 = 0010(十进制 2)
0 相与,可将其清零(其他位与 1 相与保持不变)。a 的低 2 位:a & 0xfffffffc(假设 32 位整数,0xfffffffc 二进制为 11111111...1100)。1 是奇数,为 0 是偶数。通过 a & 1 结果判断:a & 1 == 1 → 奇数;a & 1 == 0 → 偶数。1,其余为 0)相与,可提取对应位的值。a 的第 3 位(从 0 开始计数):(a & (1 << 3)) != 0。运算规则:两位中至少有一个为 1 时,结果为 1;否则为 0(一真即真)。
1 | 1 = 1,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0。
int a = 6; // 0110
int b = 11; // 1011
int c = a | b; // 0110 | 1011 = 1111(十进制 15)
1 相或,可强制其为 1(其他位与 0 相或保持不变)。a 的低 2 位设为 1:a | 0x3(0x3 二进制为 11)。x 的低 4 位和 y 的高 4 位合并:(y & 0xf0) | (x & 0x0f)。运算规则:两位不同时结果为 1,相同时为 0(异为真)。
1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0。
int a = 6; // 0110
int b = 11; // 1011
int c = a ^ b; // 0110 ^ 1011 = 1101(十进制 13)
1 异或,可翻转其值(0→1 或 1→0);与 0 异或保持不变。a 的低 3 位:a ^ 0x7(0x7 二进制为 111)。int x = 3, y = 5;
x = x ^ y; // x 现在是 x^y
y = x ^ y; // y = (x^y)^y = x(y 被赋值为原来的 x)
x = x ^ y; // x = (x^y)^x = y(x 被赋值为原来的 y)
a ^ a = 0,0 ^ a = a)。int findUnique(int arr[], int n) {
int res = 0;
for (int i = 0; i < n; i++) res ^= arr[i];
return res; // 最终 res 为唯一不重复的元素
}
int、long、char 等),不可用于浮点数。int),符号位(最高位)会参与运算,可能导致意想不到的结果(建议对无符号整数 unsigned 使用位运算)。(a & b) == c 而非 a & b == c。通过位运算符,可高效处理二进制级别的操作,是 C++ 底层编程的重要工具。掌握其规则和场景,能显著提升代码性能和灵活性。
2.57G · 2025-11-16
1.01G · 2025-11-16
886M · 2025-11-16