Java で int の特定のサブセット、たとえばビット 5 ~ 10 を取得するにはどうすればよいですか?
特定のビット位置を渡すことができる方法を探しています。入力に応じて変化するマスクを作成する方法がわかりません。
これは、intの10ビットと言うフロントを取得する方法であることを知っています:(私は思う) int x = num >> 22;
Java で int の特定のサブセット、たとえばビット 5 ~ 10 を取得するにはどうすればよいですか?
特定のビット位置を渡すことができる方法を探しています。入力に応じて変化するマスクを作成する方法がわかりません。
これは、intの10ビットと言うフロントを取得する方法であることを知っています:(私は思う) int x = num >> 22;
数値があり、 (i=5, j=10)からn
のビットが必要だとします。i
j
注意してください、それi=0
はあなたに最後のビットを与えるでしょう
int value = n & (((1 << (j-i)) - 1) << i );
あなたに結果を与えるでしょう。
左側の部分は明らかです。値があり、それにビットマスクを付けます。
マスクの値は((1 << (j-i)) - 1) << i
. それは言います:
1
(値: 0000000000000001
)j-i
(値: 2^(10-5) = 2^5 = 32 = 0000000000100000
)0000000000011111
) - 最下位ビットが逆になっているのを見ましたか?i
(値: 31*32=992 = 0000001111100000
)これで、ビット 5 から 10 (より正確には、10 番目が含まれていないため、5 から 9 まで) のビットマスクが得られました。