2017-02-23 3 views
-2

インタビュースタイルの質問を改善しようとしています。 私はこれを見つけました:このビットスワップコード(Java)を説明してください。

与えられた32ビット整数入力xは、奇数と偶数のビットを入れ替えて、結果の整数を返します。 (例えば、ビット0とビット1がスワップされ、ビット2とビット3がスワップされるなど)。たとえば : のx = 5、バイナリコード= 0101 swapOddEvenBits(5) - > 10

次のように答えがあった。

public int swapOddEvenBits(int x) { 

return (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1)); 

} 

誰かが、これをしてください説明することができます。 また、なぜ(x & 1010101010101)>> 1のようなものを使用できないのですか? これを解決する私の元の試みは、intをバイナリ文字列に変換し、次に隣接する文字をスワップしてintに変換することでした。それは働くだろうか? ありがとうございます。

答えて

2

あなたの値は

10101010101010101010101010101010 
1010101010101010101010101010101 

あなた同じ結果を得るために0b10101010101010101010101010101010b101010101010101010101010101010100x555555550xaaaaaaaaを置き換えることができます出力int進リテラルで、

System.out.println(Integer.toBinaryString(0xaaaaaaaa)); 
System.out.println(Integer.toBinaryString(0x55555555)); 

です。

+0

ありがとうございます。 – Raul

関連する問題