1 常用的位操作符
位与&、 位或、 位取反~、 位异或^
无符号数:逻辑左移、逻辑右移
有符号数:算数左移、算数右移
2 特定位清零用 &
例如将a 的bit8~bit15清零,其他位不变
a &= 0xffff00ff;
3 特定位置位用 |
例如将a 的bit8~bit15置位,其他位不变
a |= 0xffff00ff;
4 特定位取反用 ^
例如将a 的bit8~bit15置位,其他位不变
a ^= 0xffff00ff;
5 使用移位和位或构建特定位为1的数
例如 获取bit3~bit7为1,bit23~bit 25为1,其余位为0
a = (0x1f<<3) | (0x07<<23);
6 使用移位和位与和取反构建特定位为1的数
例如 获取bit3~bit7为0,bit23~bit 25为0,其余位为1
a = ~((0x1f<<3) | (0x07<<23));
7 使用宏定义来完成位操作
#defined SET_BIT_N(x,n) (x|(1<<n)) //把x的第n位置位
#defined CLR_BIT_N(x,n) (x&~(1<<n)) //把x的第n位清零
学习朱有鹏版《C语言内核深度解析》记录,部分摘抄。