2011-11-10 12 views
0

私はC#とJavascriptの違いを理解しようとしています。これを実行した後JavaScriptビット単位の演算子

var j = 0x783a9b23; 
var bt = ((16843134^(16843134 - 1)) * j); 

"BT" C#でこれを実行した後、今6051320169.

次のようになります:[OK]を、JavaScriptでこのコードを取る

int j = 0x783a9b23; 
int bt = ((16843134^(16843134 - 1)) * j); 

"BT" 1756352873になります確かに同じではありません。 JavascriptでC#がどのように見えるのか見ていないのはなぜですか?

答えて

3

あなたの整数は2147483647の上限をオーバーフローため、C#で、それは

var j = 0x783a9b23; 
var bt = ((16843134^(16843134 - 1)) * j); 
bt = bt % 2147483647 

これは、C#でのように動作させるためにこれを行うことができます。

+0

+1または 'int bt = checked((16843134 ^(16843134 - 1))* j);'オーバーフローを明らかにするには –

+1

うわー、これは甘いです。私が本当にもっと低レベルのものを理解する必要があるときまで、これまで何度もグラニュートのためのこの種のものを取ってきました。もっと学ぶためにエクササイズとしてジャズコードにチェスのコードを変換しました。感謝万円。 – user1039705

関連する問題