位操作
二进制数、位和字节
其他进制
C按位运算
按位逻辑运算
- 二进制反码或按位取反:~
一元运算符~把1变为0,把0变为1。
#include <stdio.h>
int main(void)
{
int num = 0b10101010;
printf("%d\n", ~num);
return 0;
}
- 按位与:&
二元运算符&通过逐位比较两个运算对象,生成一个新值。对于每个位,只有两个运算对象中相应的位都为1时,结果才为1(从真/假方面看,只有当两个位都为真时,结果才为真)。
// func_ptr.c -- 使用函数指针
#include <stdio.h>
int main(void)
{
int num1 = 0b10010011;
int num2 = 0b11000000;
printf("%d\n", num1 & num2);
return 0;
}
- 按位或:|
二元运算符|,通过逐位比较两个运算对象,生成一个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为1(从真/假方面看,如果两个运算对象中相应的一个位为真或两个位都为真,那么结果为真)。
(10010011) | (00111101) // 表达式
除了编号为6的位,这两个运算对象的其他位至少有一个位为1,得:(10111111) // 结果值
- 按位异或:^
二元运算符^逐位比较两个运算对象。对于每个位,如果两个运算对象中相应的位一个为1(但不是两个为1),结果为1(从真/假方面看,如果两个运算对象中相应的一个位为真且不是两个为同为1,那么结果为真)。因此,对下面表达式求值:
(10010011) ^ (00111101) // 表达式
编号为0的位都是1,所以结果为0,得:(10101110) // 结果值
掩码
按位与运算符常用于掩码(mask)。所谓掩码指的是一些设置为开(1)或关(0)的位组合。