在 JavaScript 中,所有整數字變量預設都是有符号整數,這意味着什麼呢?
有符号整數使用 31 位表示整數的數值,用第 32 位表示整數的符号,0 表示正數,1 表示負數。
數值範圍從
即 -2147483648 到 2147483647。
-2^31 - 2^31-1
JavaScript 進行位操作時,是采用32位
有符号
整型,這意味着其轉換的結果也是32位有符号整型。 有些時候,我們進行移位會出現意想不到的結果,以下是
C語言
與
JS
的對比。
C語言
1 unsigned int a = 3774191835u;
2 unsigned int b = a >> 2;
3 /* b == 943547958 */
JavaScript
1 var a = 3774191835;
2 var b = a >> 2;
3 /* b == -130193866 */
可以看到,JavaScript 進行位運算時,是采用的有符号整型,故我們得到了不一樣的結果。 怎麼解決呢?
我們可以把JavaScript 中的有符号數,轉換成無符号數。隻需要進行
>>>0
移位操作就好了。
最好不要使用,推薦使用
>>
因為最左邊一位會被解析成符号位,當數字溢出時,會被解析成
>>>
。
負數