Leo's Studio.

灵活使用位运算符

字数统计: 351阅读时长: 1 min
2018/09/08

复习

移位运算

  • “<<” 左移:右边空出的位上补 0,相当于乘以 2
  • “>>” 右移:左边空出的位上,如果正数,则补 0,否则,可能补 0 或者 1,取决于计算机系统。正数情况下,相当于除以 2
  • “>>>” 无符号右移:左边空出的位上一律补上 0,相当于除以 2

位运算符

  • & 与运算符:两个操作数相同位上同时为 1,结果数相同位上才为 1
  • | 或运算符:两个操作数相同位上只要有一个为 1,结果数相同位上就为 1
  • ^ 异或运算符:两个操作数相同位上不相同,结果数相同位上才为 1

灵活使用

状态管理

  1. 清除特定位(即设置为 0)

    mask 特定位为 0,其他位为 1:s = s & mask

  2. 获取指定位

    mask 特定位为 1,其他位为 0:r = s & mask

  3. 设置特定位(即设置为 1)

    mask 特定位为 1,其他位为 0:s = s | mask

  4. 特定位取反

    mask 特定位置为 1,其他位为 0:s = s ^ mask

交换变量

a ^= b;

b ^= a;

a ^= b;

判断奇偶

a & 1 = 0 偶数

a & 1 = 1 奇数

取模

a % (2^n) = a & (2^n -1);

2^n - 1 刚好是最高位 1 变成 0,剩下的低位 0 变成 1

CATALOG
  1. 1. 复习
    1. 1.1. 移位运算
    2. 1.2. 位运算符
  2. 2. 灵活使用
    1. 2.1. 状态管理
    2. 2.2. 交换变量
    3. 2.3. 判断奇偶
    4. 2.4. 取模