目录
位运算的好处
位运算是一个速度非常快的基本运算,其中有左移、右移、与、或、非 以及 异或。
注:补码计算,符号位也要参与
非:not ~ 与:and & 或:or | 异或:xor ∧
运算方式
- 左移:左移一位,相当于*2
比如110左移一位1100
左移x位相当于*2x
- 右移:右移一位,相当于/2,向下取整
比如110右移一位11
右移x位相当于/(2x)
- 与运算:按位进行“与”运算,两数同一位都为1为1,否则为0
例如101&110=100
- 或运算:按位进行“或”运算,两数同一位都为0时为0,否则为1
例如101|110=111
- 非运算:按位取反,例如~101=010
- 异或运算:按位进行“或”运算,两数同一位相同时为0,否则为1
例如1010∧1111=0101
位运算的运用
若当前数二进制为S,则
(反向第0位开始)
- 判断第i位是否为0
S&(1<<i)==0,将1左移i位与S进行与运算,看结果是否为0
- 将第i位设置为1
S|(1<<i)将1左移i位与S进行或运算
- 将第i位设置为0
S&~(1<<i)S与第i位为0,其余位为1的数进行与运算
n&0=0
a%2==0 => (a&1)==0
x&(x-1)==0,即x为2的幂次
x&-x,即得到最后一个1及后面的0(都是2的幂次)
制作不易!!!!