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
4

2 に答える 2

2

Pointy が回答で指摘したように、javascript は符号付き 32 ビット値を使用します。を使用>>> 0して、操作が署名されていないことを示すことができます。

console.log(((0xAABBCCDD & 0xFF00FF00) >>> 0).toString(16)) // Prints aa00cc00
于 2014-09-19T02:02:55.780 に答える
1

JavaScript のビット単位の操作には、32 ビット値への強制が含まれます。値が切り捨てられています。

編集— 申し訳ありません。コメントが指摘したように、問題は符号ビットです。

于 2014-09-19T01:51:17.137 に答える