在 C 语言编程中,位运算是直接对二进制位进行操作的运算,它为程序员提供了深入计算机底层的能力,在一些特定场景下,能实现高效的算法和优化代码。

位运算符
  1. 按位与(&):对两个操作数的对应二进制位进行与运算,只有当两个位都为 1 时,结果位才为 1。例如:

  #include int main() { int a = 5; int b = 3; int result = a & b; printf("按位与结果: %d\n", result); return 0;}

  这里,5 的二进制是 101,3 的二进制是 011,按位与后结果为 001,即十进制的 1。

  2. 按位或(|):对两个操作数的对应二进制位进行或运算,只要有一个位为 1,结果位就为 1。例如:

  #include int main() { int a = 5; int b = 3; int result = a | b; printf("按位或结果: %d\n", result); return 0;}

  按位或后结果为 111,即十进制的 7。

  3. 按位异或(^):对两个操作数的对应二进制位进行异或运算,当两个位不同时,结果位为 1,相同时为 0。例如:

  #include int main() { int a = 5; int b = 3; int result = a ^ b; printf("按位异或结果: %d\n", result); return 0;}

  按位异或后结果为 110,即十进制的 6。

  4. 按位取反(~):对操作数的每个二进制位取反,0 变为 1,1 变为 0。例如:

  #include int main() { int a = 5; int result = ~a; printf("按位取反结果: %d\n", result); return 0;}

  5 的二进制 101 取反后为 11111111111111111111111111111010(在 32 位系统中),即十进制的 -6。

  5. 左移(<<):将操作数的二进制位向左移动指定的位数,右边补 0。例如:

  #include int main() { int a = 5; int result = a << 2; printf("左移结果: %d\n", result); return 0;}

  5 的二进制 101 左移 2 位后为 10100,即十进制的 20。

  6. 右移(>>):将操作数的二进制位向右移动指定的位数,对于无符号数,左边补 0;对于有符号数,左边补符号位。例如:

  #include int main() { int a = 5; int result = a >> 1; printf("右移结果: %d\n", result); return 0;}

  5 的二进制 101 右移 1 位后为 010,即十进制的 2。

位运算的应用场景
  1. 标志位设置:使用按位与、按位或和按位取反操作来设置和清除标志位。例如,在操作系统中,用于表示文件权限的标志位可以通过位运算进行设置和修改。
  2. 数据压缩与解压缩:一些简单的数据压缩算法利用位运算来减少数据存储的空间。
  3. 密码学:位运算在一些加密算法中用于混淆和扩散数据,增强加密的安全性。

  每天坚持学习一点点,不求有回报,只愿可以丰富自己!!!