3

Java で int の特定のサブセット、たとえばビット 5 ~ 10 を取得するにはどうすればよいですか?

特定のビット位置を渡すことができる方法を探しています。入力に応じて変化するマスクを作成する方法がわかりません。

これは、intの10ビットと言うフロントを取得する方法であることを知っています:(私は思う) int x = num >> 22;

4

2 に答える 2

3

数値があり、 (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)
  • 1 を差し引く (値: 31 = 0000000000011111) - 最下位ビットが逆になっているのを見ましたか?
  • 左に数回シフトしますi(値: 31*32=992 = 0000001111100000)

これで、ビット 5 から 10 (より正確には、10 番目が含まれていないため、5 から 9 まで) のビットマスクが得られました。

于 2013-04-14T17:24:10.207 に答える