一般来说,bit shift(>> , <<
)允许我们分频/乘以^2
示例:
9 (base 10): 00000000000000000000000000001001 (base 2)
--------------------------------
9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
Run Code Online (Sandbox Code Playgroud)
= 2(基数10)
对于负数:
同样,-9 >> 2
收益率-3
,因为符号被保留:
-9 (base 10): 11111111111111111111111111110111 (base 2)
--------------------------------
-9 >> 2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)
Run Code Online (Sandbox Code Playgroud)
但是看看>>>
哪些行为对于正数而言是相同的,但是对于负数,行为却不同:
零位从左侧移入
我0
从左边找不到任何理由/用法从左边移动 (这使得整个数字为正):
-9 (base 10): 11111111111111111111111111110111 (base 2)
--------------------------------
-9 >>> 2 (base 10): …
Run Code Online (Sandbox Code Playgroud) -2
一个人的补充是100000 ... 01
-2
两个补码是1000000 ...... 10
-2 >>> 1
Run Code Online (Sandbox Code Playgroud)
根据>>>
定义,左侧移位为0
应该是这样的 01000......1
,为什么变成0111111..11
什么?