2012-02-28 43 views
3

我很困惑这个,因为我不是一个以专家什么是这个AS(动作脚本代码)的含义

while (var6 < (var5 - 1)) 
{ 
var8 = var3[(var6 + 1)]; 
var10 = (var7 >>> 5^var8 << 2) + (var8 >>> 3^var7 << 4)^(var13^var8) + (var4[var6 & 3^var11]^var7); 
var var14:* = var3[var6] + var10; 
var3[var6] = var3[var6] + var10; 
var7 = var14; 
var6 = var6 + 1; 
} 

我想知道究竟是什么,是这些运营商的意义:

  1. >>>^
  2. (var8 >>> 3^var7 << 4)
  3. var11 = var13 >>> 2 & 3

回答

5

这些都是已知的按位运算符,即通过二进制表示操纵整数值的运算符。您可以在ActionScript in Adobe's documentation中找到完整的运算符参考。

>>>bitwise unsigned right shift算子;它将位移到右侧而不保留值的符号。

^bitwise XOR运营商。它需要两个操作数并对它们的位执行XOR操作。

表达(var8 >>> 3^var7 << 4)手段:

  1. var8比特移位3次向右(由2^3分);

  2. 结果按位异或与var7;

  3. 结果左移4位(乘以2^4)。

和表达式var11 = var13 >>> 2 & 3手段:

  1. var13比特移位的2倍到右侧(由2^2分割);

  2. 结果bitwise AND编辑3;

  3. 转让给var11

+0

谢谢BoltClock为您提供帮助。我从技术上窃取了一个小问题>>和>>>之间的区别。 – Zarboot 2012-02-28 19:03:58

+0

@Zarboot:'''保留标志;即'-8 >> 1'会给你'-4'与负号,但'-8 >>> 1'会给你一个不同的结果,因为它不保留符号位(最左边位)。另请参阅:https://en.wikipedia.org/wiki/Two%27s_complement – BoltClock 2012-02-28 19:09:11

+0

您可以通过单击左侧的复选标记标记答案。欢迎来到这个网站! – BoltClock 2012-02-29 13:49:50

0

看起来反编译,我...这是很难想象谁可以肯定告诉&^和使用i = i + 1 /无类型变量另一方面运算符优先级。既然有喜欢的15变量,感觉就像它的MD5算法...不知道为什么要反编译它,如果是那样的话......

所以,你还需要这很了解吧:运营商precedense and associativity

+0

的确如此。我在网上发现了这一点,但我想知道所有这些运营商的含义是什么。是的,这是TEA实施的一部分。无论如何谢谢 – Zarboot 2012-02-29 10:52:21

0

它是XXTEA实施的一部分。

XXTEA按照定义与无符号整数一起使用。 因此,实现必须使用无符号右移运算符(即>>>但不是>>)。 左移(< <)不取决于integersrs是否签署。

+0

是的,谢谢 – Zarboot 2012-02-29 10:57:33