9位运算

异或运算:^ --> 两个变量,按照bit位比较,同位置 bit位相等 则结果为 0, 不相等,则结果为1

任意数 x   x^x = 0; x^(~x) = 0xffffffff
      x^0 = x; x^0xffffffff = ~x

或运算:| --> 把两个变量, 按照bit位比较,同位置的bit位 有一个 为 1 ,则结果 为 1,只有两个值都为 0 的情况,结果才 为0

与运算:& --> 把两个变量, 按照bit位比较,同位置的bit位  有一个为 0, 则结果为 0,只有两个值都为 1 的情况,结果才为1

事实上:|  和 || 很类似,只是说 | 是按照bit位一位位运算, &  和 && .............


教室里面有 32 盏灯, 我们怎么表示 这些灯的 打开关闭状态 ?
-- 使用 32 个变量吗 ?
-- 关闭第三个灯,打开其他所有灯?

可以使用 1 个 int 来表示 32 个灯的开关状态:每个 bit位表示 1盏灯 (0关,1开)
if (a[5] == 0) a[5] = 1; else a[5] = 0;

比如说,原来32 个灯 开关状态是 x
我们操作 x ----》 x = ~(1 << 29)


假如我们想打开 第 5 盏灯 (其他灯保持原状态) x |= (1<<27)
--> 把第5个bit位置位1,其他bit位不变

假如我们想关闭 第 5 盏灯 (其他灯保持原状态) x &= ~(1<<27)
--> 把第5个bit位置位 0,其他bit位不变

假如,我们想修改第5盏灯状态 (其他灯保存原状态) x ^= (1<<27)
--> 把第5个bit位取反

假如我们想 获取第 5 盏灯的状态? --> x & (1<<27)
--> 结果为 0 表示关闭,非0表示打开
--> (这个非0值, 就是 1<<27)

#define LED_1 1
#define LED_2 2
#define LED_3 4
#defien LED_4 8
......(10, 20, 40, 80, ....)

int led_stat

判断第 N 个灯状态 --》 led_stat & LED_N

原文地址:https://www.cnblogs.com/gd-luojialin/p/9215967.html