直接上例题
eg:
给定一个整型变量 a ,写两段代码,第一个设置 a 的 bit 3,第二个清除 bit 3。在以上两个操作中,要保持其他位不变。
分析:
使用 #define 和 bit masks 操作。这是一个有极高可移植性的方法。
最佳解决方法:
#define BIT3(0x1 << 3)
static int a;
void set_bit3(void)
{
a |= BIT3;
}
void clear_bit3(void)
{
a &= ~BIT3;
}
- 使用 #define 定义常量 bit 3 ==>1000
- a |= BIT3; ==> a = a |= BIT3; |(或):有 1 为 1 ,将 bit 3 置位
- a &= ~BIT3; ==> a = a &= ~BIT3; &(与):有 0 为 0 ,使用 ~ 取反后将 bit 3 清零
位操作注意事项:左右移带来符号位的变化
- 正数无论左移还是右移都是补 0
- 负数的补码左移在右边补 0 ,右移需要在左边补 1
eg:有符号位8位机器数(补码):1,110 0110 右移一位是:1,111 0011,开始的符号位变成了现在的数据位 - 有些乘法运算可以采用左右移来解决
eg:unsigned short A; 计算 A*256 :乘上256就是左移 8 位,左移时在低位即右边补 0