0

私はJavaScriptの初心者です。私が出会う有線のことの1つは、式の (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);結果は ですが-529764813、各合計部分を一時変数に保存してから追加すると、結果は異なり-529691705ます . mx式と結果で使用される変数が異なることに注意してくださいnew_mx。コードが実行され、chrome JS コンソールで監視されます。誰が私を助けることができます ?

>z
6
>y
13106
>sum
-1640531527
>k
[1685024337, 1683575095, 1110798964, 6387041]
>p
0
>e
2
>mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
-529764813
>t1  = (z >>> 5 ^ y << 2)
52424
>t2=(y >>> 3 ^ z << 4) ^ (sum ^ y) 
-1640543091
>t3=(k[p & 3 ^ e] ^ z)
1110798962
>new_mx=t1+t2+t3
-529691705
4

2 に答える 2

2

https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence

+よりも優先順位が高い^ため、数式は次のようにグループ化されます。

((z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4)) ^ ((sum ^ y) + (k[p & 3 ^ e] ^ z))

于 2012-05-26T14:24:14.713 に答える
2

Javascript には浮動小数点数のみがあり、整数はありません。また、Javascript でのビット単位の操作は一般的にはお勧めできません。http://www.crockford.com/javascript/survey.htmlを参照してください。

浮動小数点演算については、古典的なWhat Every Computer Scientist Should Know About Floating-Point Arithmeticを参照してください。

于 2012-05-26T14:21:28.423 に答える