二进制位操作
二进制位操作
符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 1&1=1; 1&0=0; 0&1=0; 0&0=0; |
| | 或 | 1|1=1; 1|0=1; 0|1=1; 0|0=0; |
~ | 非 | ~0=1; ~1=0; |
^ | 异或 | 1^1=0; 1^0=1; 0^1=1; 0^0=0; |
<< | 左移 | 高位丢弃,低位补 0 |
>> | 右移 | 高位补 0,低位丢弃 |
常用位操作
- 判断奇偶
- (x & 1) == 1 —等价—> (x % 2 == 1)
- (x & 1) == 0 —等价—> (x % 2 == 0)
- x / 2 —等价—> x >> 1
- x &= (x - 1) ——> 把x最低位的二进制1给去掉
- x & -x —–> 得到最低位的1
- x & ~x —–> 0
指定位置的位运算
- 将x最右边的n位清零:x & (~0 << n)
- 获取x的第n位值:(x >> n) & 1
- 获取x的第n位的幂值:x & (1 << n)
- 仅将第n位置为1:x | (1 << n)
- 仅将第n位置为0:x & (~(1 << n))
- 将x最高位至第n位(含)清零:x & ((1 << n) - 1)
- 将第n位至第0位(含)清零:x & (~((1 << (n + 1)) - 1))
异或结合律
- x ^ 0 = x, x ^ x = 0
- x ^ (~0) = ~x, x ^ (~x) = ~0
- a ^ b = c, a ^ c = b, b ^ c = a
(有没有点乘法结合律的意思)
- 字母表示:(a ^ b) ^ c = a ^ (b ^ c)
- 图形表示:(☆ ^ ◇) ^ △ = ☆ ^ (◇ ^ △)
大小字母位运算技巧
- 大写变小写、小写变大写:字符 ^= 32 (大写 ^= 32 相当于 +32,小写 ^= 32 相当于 -32)
- 大写变小写、小写变小写:字符 |= 32 (大写 |= 32 就相当于+32,小写 |= 32 不变)
- 大写变大写、小写变大写:字符 &= -33 (大写 ^= -33 不变,小写 ^= -33 相当于 -32)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!