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のビットが必要だとします。ij
注意してください、それ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 まで) のビットマスクが得られました。