2012-01-20 20 views
0

私は私が私にJavascriptのビット演算子の混乱

0xffaabbcc  // == 4289379276; 

を与えることを期待し

0xff000000 | 0x00aabbcc 

、JavaScriptではいくつかのビット演算をやろうとしている。しかし、私は結果を得る-5588020 。私は、これは、JavaScriptのビット単位の演算は32ビットの数値でしか動作しませんが、問題の2つの数値ではないという事実と関係していると思います。< =誰かが私が間違っているところを指摘することができますか、どのように私は希望の結果を得ることができますか?

How to do bitwise AND in javascript on variables that are longer than 32 bit?で概説されている技術を試しました。


ので、コメントの

おかげですべての、...投稿する他の誰かのためにそれをここに入れて自分の答えを投稿することができません。 Javascript bitwise operator confusionの回答がこれをカバーしています。 JavaScriptは32ビットのSIGNED intに対してビット単位の演算を行うことが判明しました。マイ|上記のoeprationが可能な最大範囲よりも大きかったため、結果は符号付き整数として戻ってきました。解決策は、出力を0右にシフトすることです。これはJSに、再び符号なしとして処理するように指示しているようです。

(0xff000000 | 0x00aabbcc)>>>0 
+1

正確に何を期待していますか?それは署名された整数について正しいと思われます。 – JayC

+0

結果として数字4289379276を期待していますが、代わりに-5588020が得られます。何がありますか? – aaronsnoswell

+2

これは符号付き整数として0xffaabbccです。 – JayC

答えて

2

正しい16進値を取得していますが、それはあなたが探している整数値ではありません。

4289379276から2^32 = -5588020

私はあなたの結果をどうしようとしているかに依存しているとして、それが足りるかどうかを考えます。

+0

ありがとうございました:) – aaronsnoswell