我很困惑,因为我不是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;
}
我想知道的是这些运算符的含义是什么:
>>>
和^
(var8 >>> 3 ^ var7 << 4)
var11 = var13 >>> 2 & 3
答案 0 :(得分:5)
这些都称为按位运算符,即通过二进制表示操作整数值的运算符。您可以在ActionScript in Adobe's documentation中找到运算符的完整参考。
>>>
是bitwise unsigned right shift运算符;它将位移到右边而不保留值的符号。
^
是bitwise XOR运算符。它需要两个操作数并对它们的位执行XOR运算。
表达式(var8 >>> 3 ^ var7 << 4)
表示:
var8
向右移位3次(除以2 ^ 3);
结果按位与var7
进行异或;
结果向左移位4次(乘以2 ^ 4)。
表达式var11 = var13 >>> 2 & 3
表示:
var13
向右移位2次(除以2 ^ 2);
结果bitwise AND带有3
;
已分配到var11
。
答案 1 :(得分:0)
答案 2 :(得分:0)
看起来反编译给我......很难想象有人能够确定地告诉操作员优先&
和^
,另一方面使用i = i + 1
/无类型变量。 。由于有15个变量,感觉就像是MD5算法......不知道你为什么要反编译它,如果是这样的话......
因此,您还需要了解它:运算符precedense and associativity
答案 3 :(得分:0)
这是XXTEA的实施的一部分。
XXTEA的定义适用于无符号整数。 因此,实现必须使用无符号右移运算符(即&gt;&gt;&gt;但不是&gt;&gt;)。 左移(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;