重複の可能性:
Javaで10進数を2進数に変換する
x
数値、配列、および配列のサイズを示すp
別の数値を入力として受け取るこのコードを見つけましたpmax
p
public static int permute(int x, int p[], int pmax) {
int y = 0;
for (int i = 0; i < p.length; ++i) {
y <<= 1;
y |= (x >> (pmax - p[i])) & 1;
}
return y;
}
x
このコードは、配列で定義された規則に従って、数値に格納されている最初のバイトのビットを並べ替える必要がありますp
たとえば、最初の pmax ビットx
が101
あり、配列 p が次
p={2 1 3}
の場合: この関数( y
)の結果は次のようになります。011
質問
ビット単位の演算子を使用したことがないため、上記のコードのすべての中間結果を確認したいと考えています。たとえば、何が機能y<<=1
し、なぜそれが使用されるのか。これを行うには、y
変数をバイナリ形式で表示する必要があります。そうしないと、ランダムな小数を取得するだけで、何も理解できません。
では、各ビット演算の後に結果をバイナリ形式で表示するにはどうすればよいでしょうか?
これがこのコードが何をするかを正確に知るための良い方法ではない場合、どの方法をお勧めしますか?