バイトがある場合、メソッドは特定の位置でビットを取得するためにどのように見えるでしょうか?
これが私が知っていることであり、私はそれが機能するとは思わない。
public byte getBit(int position) {
return (byte) (ID >> (position - 1));
}
ここで、ID
は、情報を取得するバイトの名前です。
public byte getBit(int position)
{
return (ID >> position) & 1;
}
IDを位置ごとに右にシフトすると、ビット#positionが数値の右端になります。それとビット単位のAND &
が1の場合、ビットが設定されているかどうかがわかります。
position = 2
ID = 5 = 0000 0101 (in binary)
ID >> position = 0000 0001
0000 0001 & 0000 0001( 1 in binary ) = 1, because the furthest right bit is set.
ビットマスクを作成し、ビット単位で処理します。それはあなたが持っているものに非常に近いものになります-shiftを使用して適切なビットを設定し、&
を使用してビット単位の操作を行います。
そう
return ((byte)ID) & (0x01 << pos) ;
pos
の範囲は0から7です。「ビット1」として最下位ビットがある場合は、-1
が必要ですが、これに反対することをお勧めします。位置は常に私にとってエラーの原因です。
Javaでは次のように動作します:
if (value << ~x < 0) {
// xth bit set
} else {
// xth bit not set
}
value
およびx
には、int
またはlong
を指定できます(同じである必要はありません)。
非Javaプログラマ向けの注意事項:上記の式はJavaで機能します。なぜなら、その言語ではビットシフト演算子は5(または6 of long
)右側のオペランドの最下位ビットこれは、式を暗黙的にvalue << (~x & 31)
(またはvalue
がlong
の場合はvalue << (~x & 63)
)に変換します。
Javascript:javascriptでも機能します(Javaと同様、シフトカウントの最下位5ビットのみが適用されます)。 JavaScriptでは、number
は32ビットです。
特にCでは、負のシフトカウントは未定義の動作を呼び出すため、このテストは必ずしも機能しません(ただし、コンパイラ/プロセッサの特定の組み合わせによっては動作する場合があります)。
整数のn番目のビットを取得する
return ((num >> (n-1)) & 1);