教程 cpp tutorial

位运算符

位运算符用于操作整数的二进制表示,它们通常用于底层编程、加密算法或高效的数据处理。C++ 提供了一组位运算符,用于处理位级别的操作。

位运算符

1. 按位与运算符 &

按位与运算符比较两个操作数的每一位,只有在两个相应的位都为 1 时,结果才为 1,否则为 0。

cpp
int a = 5;  // 101
int b = 3;  // 011
int result = a & b;  // 001 -> result = 1

`

2. 按位或运算符 |

按位或运算符比较两个操作数的每一位,只有在两个相应的位中至少有一个为 1 时,结果才为 1,否则为 0。

cpp
int a = 5;  // 101
int b = 3;  // 011
int result = a | b;  // 111 -> result = 7

3. 按位异或运算符 ^

按位异或运算符比较两个操作数的每一位,只有在两个相应的位不同时,结果才为 1,相同则为 0。

cpp
int a = 5;  // 101
int b = 3;  // 011
int result = a ^ b;  // 110 -> result = 6

4. 按位取反运算符 ~

按位取反运算符将操作数的每一位进行取反,即 0 变为 1,1 变为 0。

cpp
int a = 5;  // 101
int result = ~a;  // 010 -> result = -6 (以补码表示)

5. 左移运算符 <<

左移运算符将操作数的位向左移动指定的位数。左移会将数值扩大 2 的移位次数次方。

cpp
int a = 5;  // 101
int result = a << 1;  // 1010 -> result = 10

6. 右移运算符 >>

右移运算符将操作数的位向右移动指定的位数。右移会将数值缩小 2 的移位次数次方。

cpp
int a = 5;  // 101
int result = a >> 1;  // 010 -> result = 2

位运算符应用

1. 交换两个整数

通过位运算符可以交换两个整数的值而不使用额外的变量:

cpp
int a = 5, b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;

2. 判断数字是否是偶数或奇数

通过检查一个整数的最低有效位(LSB),可以判断它是偶数还是奇数。若最低有效位为 0,则为偶数;否则为奇数。

cpp
int a = 4;
if ((a & 1) == 0) {
    cout << "偶数" << endl;
} else {
    cout << "奇数" << endl;
}

3. 设置、清除和切换特定位

使用位运算符可以方便地设置、清除或切换特定的位。

  • 设置特定位: 将特定的位设置为 1。
cpp
  int a = 5;  // 0101
  a = a | (1 << 2);  // 设置第 3 位为 1,结果 1111
  • 清除特定位: 将特定的位清除为 0。
cpp
  int a = 5;  // 0101
  a = a & ~(1 << 2);  // 清除第 3 位,结果 0001
  • 切换特定位: 切换特定的位(1 变 0,0 变 1)。
cpp
  int a = 5;  // 0101
  a = a ^ (1 << 2);  // 切换第 3 位,结果 0001

小结

  • 位运算符 提供了高效的整数操作,广泛应用于底层编程和性能优化中。
  • 常用的位运算符包括按位与、按位或、按位异或、按位取反、左移和右移。
  • 位运算在处理特定位、加密算法和高效的算法设计中有着重要作用。

通过掌握这些位运算符,可以在 C++ 中进行高效的数据操作和处理。