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