2012-02-28 101 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