位逻辑运算符
~:二进制反码或者按位取反
&:逐位比较产生一个新值。只有两个操作数的对应位都为1时结果才是1。
|位或:按位比较,有一个为1则取值为1
^:位异或
1、用法:掩码
使用位和 &
就是某些位设为开(1)而某些位设置为关(0)的位组合。
用于覆盖某个变量的某些位。
2、用法:打开位
使用位或 |
把某个变量的特定位打开。
3、用法:关闭位
使用& ~把特定位关闭
4、用法:转置位
使用^
5、用法:查看一位的值
判断flag的第一位是否和mask相同。
flag = 10110101;
mask = 00000010;
if (flag == mask) {
printf("wow");
}//不能工作
因为flag中的其它位也会和mask比较,产生其它的结果。
if ((flag & mask) == mask) {
printf("wow");
}//可以工作!
位字段
struct {
unsigned int a : 1;
unsigned int b : 2;
unsigned int c : 3;
} prnt;
prnt.a = 0;
prnt.b = 1;
prnt.c = 100;
使用位字段决定每个字段的宽度,也就是说,a只能赋值不超过1的数。
必须确保值没有超过字段的容量。
如果超过了,就会在下一个unsigned int储存位置。