javascript数值添加,不同的结果返回不同的添加样式

时间:2012-05-26 14:13:56

标签: javascript

我是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

2 个答案:

答案 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))