2014-09-19 37 views
0

爲什麼Javascript錯誤地評估以下內容?爲什麼這個按位與產生不正確的數字?

0xAABBCCDD & 0xFF00FF00 

在Javascript中:

console.log((0xAABBCCDD & 0xFF00FF00).toString(16)) // -55ff3400 
console.log((0xAABBCCDD & 0xFF00FF00) === 0xAA00CC00) // false 

在C++:

cout << hex << (0xAABBCCDD & 0xFF00FF00) << endl; // 0xAA00CC00 
+0

使用'的console.log(((0xAABBCCDD&0xFF00FF00)>>> 0)的ToString(16))'來解決它 – soktinpk 2014-09-19 02:01:38

回答

2

正如Pointy在他的回答中指出的那樣,javascript使用帶符號的32位值。您可以使用>>> 0來指示該操作是無符號的。

console.log(((0xAABBCCDD & 0xFF00FF00) >>> 0).toString(16)) // Prints aa00cc00 
+0

你打敗了我。謝謝! – Qix 2014-09-19 02:03:21

1

JavaScript的位操作涉及強迫32位值。您的值正在被截斷。

編輯 —對不起;正如評論指出的那樣,這是問題的標誌位。

+0

是不是'0xAABBCCDD'一個32位的值?這解釋了一些其他的事情,但不是爲什麼這個簡單的32位操作失敗。 – Qix 2014-09-19 01:52:03

+3

*簽名* 32位整數。 – user2357112 2014-09-19 01:59:05

相關問題