2012-10-20 4459 views
5

我有這段代碼。請讓我明白這段代碼究竟意味着什麼0x0F是什麼意思?這個代碼是什麼意思?

for(var i = 0; i < input.length; i++) 
    { 
    x = input.charCodeAt(i); 
    output += hex_tab.charAt((x >>> 4) & 0x0F) 
      + hex_tab.charAt(x  & 0x0F); 
    } 

什麼是0x0F?而且,>>>意思?

+1

'0x0f'是一個字節的十六進制表示。具體來說,位模式'00001111' – Basic

+0

好吧,那個表達式如何使它在那裏工作?那麼'(x >>> 4)&0x0F'如何返回整數值,因爲chatAt()函數需要整數輸入 – Prakash

回答

10

>>>是無符號的按位右移運算符。 0x0F是一個十進制數字,十進制數等於15。它代表較低的四位並轉換位模式0000 1111&是按位AND操作。

(x >>> 4) & 0x0F給你一個字節的高半字節。所以,如果你有6A,你基本上結束了06

6A = ((0110 1010 >>> 4) & 0x0F) = (0000 0110 & 0x0F) = (0000 0110 & 0000 1111) = 0000 0110 = 06 

x & 0x0F爲您提供了該字節的低四位。所以如果你有6A,你最終會得到0A

6A = (0110 1010 & 0x0F) = (0110 1010 & 0000 1111) = 0000 1010 = 0A 

從我可以告訴,它看起來就像是總結的所有字符的單個半字節的值的字符串,也許是爲了建立某種形式的校驗和。

-1

0x0F是十六進制的數字。而>>>是按位右移運算符。

4

0x0f是一個字節的十六進制表示。具體而言,位模式00001111

它將該字符的值,移位它4個位置向右(>>> 4,這是一個unsigned shift),然後執行逐位AND與圖案以上 - 例如忽略左最多4位產生數字0-15。

然後它將該數字添加到原始字符的最右側4位(第二個& 0x0F沒有移位),另一個0-15數字。

+0

好的,您可以給同樣的代碼轉換爲PHP。我有很多問題轉換爲PHP。我如何在PHP中執行相同的過程? – Prakash

+0

所有的操作都可以在PHP中以相同的方式完成。 [看這裏](http://php.net/manual/en/language.operators.bitwise.php)的語法 – Basic

+0

小心'>>>'不是一個簡單的右移。這是一個無符號的右移,所以它忽略了符號位。 –