バイトの最初のビットにどの値が含まれているかを知りたい。例えば最上位ビット(MSB)を見つける方法
:
最初のビットが1または0である場合、私はどうすればbyte m = (byte) 0x8C;
を知っている可能性がありますか?
誰でもお手伝いできますか?
バイトの最初のビットにどの値が含まれているかを知りたい。例えば最上位ビット(MSB)を見つける方法
:
最初のビットが1または0である場合、私はどうすればbyte m = (byte) 0x8C;
を知っている可能性がありますか?
誰でもお手伝いできますか?
あなたが0x80ので左端のビット、ビット単位およびそれを意味し、それがゼロでもないかどうかを調べると仮定:
public boolean isFirstBitSet(byte b) {
System.out.println((b & (byte)0x80));
return (b & (byte)0x80) < 0;
}
あなたは最下位ビットを意味する場合は、0×01にしてして必要と異なる状態をチェックします:
public boolean isFirstBitSet(byte b) {
System.out.println((b & (byte)0x01));
return (b & (byte)0x80) > 0;
}
最初のビットが
if((m & 1) >0) ...
次いで、最下位ビット(すなわち、ビット0)である場合それを行う必要があります。一般的に
、
if ((m & (1<<N)) > 0) ...
はN
が設定されているかどうか少しあなたを与えるだろう。 しかし、最も高いビット(ビット7)を意味する場合は、N = 7を使用します。
「最初のビット」の意味によって異なります。あなたは、「最上位ビット」を意味する場合は、使用することができます。
// 0 or 1
int msb = (m & 0xff) >> 7;
それともあなただけの使用、0x80のか、0という値を気にしない場合:
// 0 or 0x80
int msb = m & 0x80;
あるいは実際には、boolean
ように:あなたは最下位ビットを意味する場合
は、あなただけ使用することができます。
// 0 or 1
int lsb = m & 1;
これは最上位ビットです。あなたの助けをありがとう –
@ジョン私はそれがなぜ '0xff'なのか最初に理解していませんか? '0x80'で十分です。私はそれを行う正しい方法は 'int msb =(m&0x80)>>> 7;'だと思います。 –
@ Eng.Fouad:はい、そうでしょう。私は常習的に0xffでマスキングすることでbyteをintに変換しています:) –
ビットと演算子を使用します。
public class BitExample {
public static void main(String args[]) throws Exception {
byte m = (byte)0x8C;
System.out.println("The first bit is " + (m & (byte)0x01));
m = (byte)0xFF;
System.out.println("The first bit is " + (m & (byte)0x01));
}
}
// output is...
The first bit is 0
The first bit is 1
そのハックのビットがありますが、これはbyte
、short
、int
、long
のデータ・タイプのために働く
if(x >> -1 != 0) // top bit set.
を使用することができます。
しかしながら、ほとんどの種類の最も簡単な方法は、これは、負のゼロと負のNaNを無視(byte
、short
、int
、long
、float
、又はdouble
ために働く0
if (x < 0) // top bit set.
と比較することですほとんどの人が行います)
char
の場合は、ビット数を知る必要があります。 ;)
if (ch >>> 15 != 0) // top bit set.
「最初の」とは具体的には何ですか? –