位运算
标志 | ↓=意义 |
---|---|
a & b |
按位与 |
`a | b` |
a ^ b |
按位异或 |
~x |
按位取反 |
! a |
非运算 |
a >> x |
右移运算 |
a << x |
左移运算 |
位运算常用技巧
操作 | 表示 |
---|---|
将 (x) 第 (i) 位取反 | x ^= (1 << i) |
将 (x) 第 (i) 位制成 1 | ` x |
将 (x) 第 (i) 位制成 (0) | x &= -1 ^ (1 << i) 或 x &= ~(1 << i) |
取 (x) 对 (2) 取模的结果 | x & 1 |
取 (x) 的第 (i) 位是否为 | x & (1 << i) 或 (x >> i) & 1 |
取 (x) 的最后一位 | x & -x |
取 (x) 的绝对值 | (x ^ (x >> 31) ) - (x >> 31) (int 型) |
判断 (x) 是否不为 (2) 的整次方幂 | x & (x - 1) |
判断 (a) 是否不等于 (b) | a != b ,a - b ,a ^ b |
判断 x 是否不等于 −1 | x != -1 ,x ^ -1 ,x + 1 ,~x |
负数表示
用补码来表示负数
(∵−1=0−1)
(0=000⋯00)
(1=000⋯01)
(∴−1=111⋯11)
同理:
(−2=111⋯110)
(−3=111⋯101)
(−4=111⋯100)
(...)
于是有 -x = ~x + 1
参考来源:
https://www.acwing.com/blog/content/2415/
https://www.cnblogs.com/rebirth-death2019/p/13778582.html