1. 分类
1.1 左移
对于一个位表示为 [ xw-1, xw-2, … , x0 ] 的操作数, x << k 会生成一个值, 其位表示为 [ xw-k-1, xw-k-1, … , x0, 0 , … , 0 ] , 也就是说, x向左移动k位, 丢弃最高的k位, 并在右端补 k 个0.
1.2 算术右移
右移一般指算术右移, 即x >> k, 是指一个位表示为 [ xw-1, xw-2, … , x0 ] 右移后, 其位表示为 [ xw-1, … , xw-1, xw-1, xw-2 , … , xk ] , 右端丢弃k个位, 并在左端补 k 个最高有效位的值. 这对有符号整数运算非常有用.
1.3 逻辑右移
又称无条件右移, 是指一个位表示为 [ xw-1, xw-2, … , x0 ] 的操作数, x >>> k 会生成一个值, 其位表示为 [ 0, … , 0 , xw-1, xw-2 , … , xk ] , x向右移动k位, 右端丢弃最低的k个位, 并在左端补 k 个0.
2.注意
- 对整数进行左移操作时, 可能会改变符号.
- 移位运算优先级低于加减法.
- 一般来说,
0
≤
k
0 \leq k
0≤k
≤
w
\leq w
≤w, 若
k
>
w
k \gt w
k>w, 则移动量为 k mod w 即可.
如w=32, 则a << 32 , a >> 36 , a >> 40 等价于 a , a >> 6 , a >> 8. - 右移常用应用如取指定一段位的值. 如: 取5~8位的值, a >>> 4 & 0xF