1

次のような2進数があります。

00000000 00000000 00000011 00001101  =  781 integer value  = integer name "packed"

Javaでビットごとに使用して、それらのそれぞれを個別の整数値として抽出するにはどうすればよいですか。次のように:

int a = (function) = 00000000;
int b = (function) = 00000000;
int c = (function) = 00000011;
int d = (function) = 00001101;

あなたが私がそこで何をしているのかを見ることができれば..最初の8を1つの整数に、次を2番目の整数に、というように..Javaでビット単位でこれを行うと思いますが、完全にはわかりません。どんな助けでも大歓迎です。申し訳ありませんが、私はこの種のことはまったく初めてで、これについて本当に助けが必要です、ありがとう! 基本的に(関数)は次のようになります。

packed >> 5; (I know this isn't nearly right that is why i am needing help on this)...

ありがとう!

4

3 に答える 3

4

これは、マスクを使用してビットごとの AND 演算を実行し、その後にビット シフトを実行することで実現できます。マスクは、関心のないすべてのビットがゼロに設定された単純な数値です。気にしないビットをマスクします

int BYTE_ONE_MASK   = 0xFF;
int BYTE_TWO_MASK   = 0xFF00;
int BYTE_THREE_MASK = 0xFF0000;
int BYTE_FOUR_MASK  = 0xFF000000;

ビット シフトは、最下位バイト以外のすべてのバイトに必要です。

int a = (val & BYTE_ONE_MASK);
int b = (val & BYTE_TWO_MASK) >> 8;
int c = (val & BYTE_THREE_MASK) >> 16;
int d = (val & BYTE_FOUR_MASK) >> 24;

これは、次のような関数に一般化できます。

  // Assuming the first byte is n = 0.
  public static int getByte(int val, int n) {
    int shift = n * 8;
    int mask = 0xFF << shift;
    return (val & mask) >> shift;
  }
于 2013-06-13T00:43:04.693 に答える