在C语言中,位运算符用于对二进制位进行操作,包括左移、右移、按位与、按位或、按位异或和按位取反等操作。本文将详细介绍C语言中的位运算符,包括运算规则和具体的例子。
C语言提供了一些位运算符,用于直接操作二进制位,这些运算符通常用于底层系统编程和优化。以下是常用的位运算符:
<<
:二进制左移>>
:二进制右移&
:按位与|
:按位或^
:按位异或~
:按位取反这些运算符的运算规则都是基于二进制的补码运算。
<<
左移运算符(<<
)将一个数的各二进制位全部左移指定的位数,左边的二进制位丢弃,右边补0。在一定范围内,数据每向左移动一位,相当于原数据乘以2。
示例:
int num = 3;
int result = num << 2; // 3左移2位,相当于3 * 2的2次幂
// result的值为 12
>>
右移运算符(>>
)将一个数的各二进制位全部右移指定的位数。正数左补0,负数左补1,右边丢弃。在一定范围内,数据每向右移动一位,相当于原数据除以2。
示例:
int num = 8;
int result = num >> 2; // 8右移2位,相当于8除以2的2次幂
// result的值为 2
&
按位与运算符(&
)的运算规则是对应位都为1才为1,否则为0。
示例:
int a = 9; // 0b00001001
int b = 7; // 0b00000111
int result = a & b; // 按位与
// result的值为 1,二进制为0b00000001
|
按位或运算符(|
)的运算规则是对应位只要有一个为1即为1,否则为0。
示例:
int a = 9; // 0b00001001
int b = 7; // 0b00000111
int result = a | b; // 按位或
// result的值为 15,二进制为0b00001111
^
按位异或运算符(^
)的运算规则是对应位一个为1一个为0才为1,否则为0。
示例:
int a = 9; // 0b00001001
int b = 7; // 0b00000111
int result = a ^ b; // 按位异或
// result的值为 14,二进制为0b00001110
~
按位取反运算符(~
)的运算规则是对应位为1,则结果为0;对应位为0,则结果为1。
示例:
int num = 9; // 0b00001001
int result = ~num; // 按位取反
// result的值为 -10,二进制为0b11110110
结合赋值运算符的经验,位运算符也有类似的结合赋值运算符,例如:<<=
, >>=
, &=
, |=
等。
示例:
int num = 5;
num <<= 2; // 将num左移2位,相当于num乘以2的2次幂
// num的值为 20
char x = 53; // 0b00110101
x = x & 252; // 0b11111100
// x的值为 52,二进制为0b00110100
char x = 53; // 0b00110101
x = x & 128; // 0b10000000
if (x == 0) {
printf("最高位为0\n");
} else {
printf("最高位不为0\n");
}
char x = 53; // 0b00110101
x = x & 15; // 0b00001111