2012-04-24 3 views
0

ビット演算子で実験したところ、to my questionhereです。私のテストスイートの追加情報:2つの整数に同じ符号が付いていないか確認してください

チェック結果:

function equal(n1,n2){ 
    var bool = (n1^n2 >= 0)?true:false; 
    document.write("<div>"+bool+" ("+(n1^n2)+")</div>"); 
} 


equal(-5,-2); //true 
equal(-4,-20); //true 
equal(15,-2); //false 
equal(25,3); //true 

equal(-1,1); //false 
equal(1,1); //true 
equal(-1,-1); //true 

// edgecases 
equal(0,0); 
equal(-0,0); 
equal(+0,0); 
equal(-0,+0); 
equal(+0,-0); 

結果:

true (5) 
true (16) 
true (-15) 
true (26) 

true (-2) 
false (0) 
true (0) 

true (0) 
true (0) 
true (0) 
true (0) 
true (0) 

マイfiddle is hereに従って。

結果は私を非常に混乱させます。私はあまりにも愚かですか?ここで何が起こったのですか?

+0

あなたは愚かではありません.Javascriptは、ゼロに近づいている数で本当に面白い動作をしています。これを読んで:http://www.2ality.com/2012/03/signedzero.html –

答えて

1

あなたは間違った場所にかっこを持っていた:

function equal(n1, n2){ 
    var bool = (n1^n2) >= 0 ? true : false; 
    document.write("<div>" + bool + " (" + (n1^n2) + ")</div>"); 
} 

はここで何を期待一致する結果とupdated fiddleです。

これは、ビット演算子のすべてが関係比較演算子よりもlower precedenceであるため、この場合重要です。条件付き演算子(?:)は、すべてのビット演算子よりも優先順位が低いため、条件全体を別の括弧で囲む必要はありません。

+0

ああ、その演算子バインディング^^ TYは非常に。 – Christoph

+0

いいえ問題は、うれしい私が助けることができる:) –

関連する問題