2012-10-20 4483 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

小心'>>>'不是一个简单的右移。这是一个无符号的右移,所以它忽略了符号位。 –