0

我是 javascript 的新手,我遇到的一件连线事情是:公式 (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);结果是-529764813,但是如果我将每个总和部分存储到一个临时变量中,然后将它们相加,结果就不同了-529691705。请看一下公式中使用的变量和结果mxnew_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

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 回答
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 回答