第五课 C语言基础(续4)
(四)位运算符(Bitwise Operators)1、概念位运算符用于对整数的二进制表示进行操作。
例如:
int a = 5, b = 3; int andBitwise = (a & b); // 1 int orBitwise = (a | b); // 7 int xorBitwise = (a ^ b); // 6 int notBitwise = ~a; // -6 int leftShift = (a << 2); // 20 int rightShift = (a >> 2); // 1
2.应用位运算符(Bitwise Operators)用于对整数的二进制表示进行操作。它们在C语言中非常强大,尤其适用于底层编程、优化性能和处理硬件相关的任务。以下是C语言中常见的位运算符及其使用方法和例如: 1)按位与(Bitwise AND):&按位与运算符对两个操作数的每一位进行逻辑与操作。如果两个位都为1,则结果为1;否则为0。
例如: #include <stdio.h> int main()
{ int a = 12; // 二进制:1100 int b = 10; // 二进制:1010 int result = a & b; // 二进制:1000,十进制:8 printf("Result of a & b: %d\n", result); return 0; } 输出: Result of a & b: 8
2)按位或(Bitwise OR):|
按位或运算符对两个操作数的每一位进行逻辑或操作。如果两个位中至少有一个为1,则结果为1;否则为0。 例如:
#include <stdio.h> int main()
{ int a = 12; // 二进制:1100 int b = 10; // 二进制:1010 int result = a | b; // 二进制:1110,十进制:14 printf("Result of a | b: %d\n", result); return 0; } 输出: Result of a | b: 14
3)按位异或(Bitwise XOR):^
按位异或运算符对两个操作数的每一位进行逻辑异或操作。如果两个位不同,则结果为1;否则为0。
例如: #include <stdio.h> int main()
{ int a = 12; // 二进制:1100 int b = 10; // 二进制:1010 int result = a ^ b; // 二进制:0110,十进制:6 printf("Result of a ^ b: %d\n", result); return 0; } 输出: Result of a ^ b: 6
4)按位取反(Bitwise NOT):~
按位取反运算符对操作数的每一位进行取反操作。0变为1,1变为0。
例如: #include <stdio.h> int main()
{ int a = 12; // 二进制:00001100(假设是8位) int result = ~a; // 二进制:11110011,十进制:-13(补码表示) printf("Result of ~a: %d\n", result); return 0; } 输出: Result of ~a: -13
注意:在C语言中,整数通常以补码形式存储,因此按位取反的结果可能与直观的二进制取反不同。
5)左移(Bitwise Left Shift):<<
左移运算符将操作数的二进制表示向左移动指定的位数,右侧补0。
例如: #include <stdio.h> int main()
{ int a = 12; // 二进制:00001100(假设是8位) int result = a << 2; // 二进制:00110000,十进制:48 printf("Result of a << 2: %d\n", result); return 0; } 输出: Result of a << 2: 48
6)右移(Bitwise Right Shift):>>
右移运算符将操作数的二进制表示向右移动指定的位数,左侧补符号位(对于有符号整数)或补0(对于无符号整数)。
例如:
#include <stdio.h> int main()
{ int a = 12; // 二进制:00001100(假设是8位) int result = a >> 2; // 二进制:00000011,十进制:3 printf("Result of a >> 2: %d\n", result);
return 0; } 输出: Result of a >> 2: 3
7)实际应用
例如:检查一个数是否为2的幂 一个数如果是2的幂,则其二进制表示中只有一个1。通过按位与操作可以检查这一点:
#include <stdio.h> int main()
{ int num = 16; if ((num & (num - 1)) == 0 && num != 0)
{ printf("%d is a power of 2\n", num); } else
{ printf("%d is not a power of 2\n", num); } return 0; } 输出: 16 is a power of 2
|