我是javascript的新手,我遇到的一个有线的事情是:公式(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
答案 0 :(得分:2)
Javascript只有浮点数,没有整数。 Javascript中的按位操作通常不是一个好主意,请参阅http://www.crockford.com/javascript/survey.html
对于浮点运算,请参阅经典What Every Computer Scientist Should Know About Floating-Point Arithmetic。
答案 1 :(得分: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))