JavaScript 32位整型無符號操做

在 JavaScript 中,全部整數字變量默認都是有符號整數,這意味着什麼呢?ip

有符號整數使用 31 位表示整數的數值,用第 32 位表示整數的符號,0 表示正數,1 表示負數。
數值範圍從 -2^31 - 2^31-1 即 -2147483648 到 2147483647。變量

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 移位操做就行了。

最好不要使用 >> ,推薦使用 >>> 由於最左邊一位會被解析成符號位,當數字溢出時,會被解析成負數。

unsigned = signed>>>0;經過使用無符號右移運算符,位動位數爲0,能夠將32位有符號整數,轉化爲32位無符號整數。signed = unsigned << 0;經過使用左移運算符,位動位數爲0,能夠將32位無符號整數,轉化爲32位有符號整數。

相關文章
相關標籤/搜索