1. 移位计算
k是n所占的位数
例如:java中的int 是 4个字节即32位,long是8个字节即64位
if (m < k)
m = k;
else
m = m % k;
n >> m = Math.floor(n / 2^m); // floor(x)是对x向下取整的意思,即比x小的最接近的整数,
// 正数就是去掉x的小数位,负数就是比x小的负数。
n << m = n * (2^m);
2. 二进制移位计算
1111 1111 1110 1001
||
\/
1111 1111 1110 1000
i 正数 :移动相应的位数,并补零。
例如:int 39 << 4 = 624:
0000 0000 0010 0111
||
\/
0000 0010 0111 0000
ii 负数 :移动相应的位数,没移动一位符号位补1。
注意负数在计算机中是用它的补码表示的。
例如:int -23 >> 3 = -3
1111 1111 1110 1001
||
\/
1111 1111 1111 1101