2012-10-20 516 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'は1バイトの16進表現です。具体的には、ビットパターン「00001111」 – Basic

+0

さて、その式はどのように動作しますか? chatAt()関数が整数入力を要求するので、 '(x >>> 4)&0x0F'は整数値を返します。 – Prakash

答えて

10

>>>は、符号なしビット右シフト演算子です。 0x0Fは10進数で15に等しい16進数です。下位4ビットを表し、ビットパターン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は、16進数の数値です。 >>>はビット単位の右シフト演算子です。

4

0x0fは、1バイトの16進表現です。具体的には、ビットパターン00001111

それは右にそれを4ヶ所をずらし、文字の値を取っている(、それはunsigned shift>>> 4だ)、その後、上記のパターンで、ビット単位のANDを実行する - 左を無視する例ほとんどの4ビットは0〜15の数値になります。

次に、元の文字の右端の4ビット(シフトなしの2番目の& 0x0F)に0を追加します。

+0

同じコードをPHPに変換できますか?私はPHPにそれを変換する多くの問題を抱えています。 PHPで同じプロセスを実行するにはどうすればよいですか? – Prakash

+0

すべての操作はPHPで同じ方法で行うことができます。構文は – Basic

+0

の[こちらをご覧ください](http://php.net/manual/en/language.operators.bitwise.php)注意深い '>>>'は単純な右シフトではありません。これは符号なし右シフトであるため、符号ビットを無視します。 –

関連する問題