2011-09-28 13 views
5

バイトの最初のビットにどの値が含まれているかを知りたい。例えば最上位ビット(MSB)を見つける方法

最初のビットが1または0である場合、私はどうすればbyte m = (byte) 0x8C;

を知っている可能性がありますか?

誰でもお手伝いできますか?

+3

「最初の」とは具体的には何ですか? –

答えて

3

あなたが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; 
} 
3

最初のビットが

if((m & 1) >0) ... 

次いで、最下位ビット(すなわち、ビット0)である場合それを行う必要があります。一般的に

if ((m & (1<<N)) > 0) ... 

Nが設定されているかどうか少しあなたを与えるだろう。 しかし、最も高いビット(ビット7)を意味する場合は、N = 7を使用します。

21

「最初のビット」の意味によって異なります。あなたは、「最上位ビット」を意味する場合は、使用することができます。

// 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; 
+0

これは最上位ビットです。あなたの助けをありがとう –

+2

@ジョン私はそれがなぜ '0xff'なのか最初に理解していませんか? '0x80'で十分です。私はそれを行う正しい方法は 'int msb =(m&0x80)>>> 7;'だと思います。 –

+0

@ Eng.Fouad:はい、そうでしょう。私は常習的に0xffでマスキングすることでbyteをintに変換しています:) –

1

ビットと演算子を使用します。

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 
1

そのハックのビットがありますが、これはbyteshortintlongのデータ・タイプのために働く

if(x >> -1 != 0) // top bit set. 

を使用することができます。

しかしながら、ほとんどの種類の最も簡単な方法は、これは、負のゼロと負のNaNを無視(byteshortintlongfloat、又はdouble

ために働く0

if (x < 0) // top bit set. 

と比較することですほとんどの人が行います)

charの場合は、ビット数を知る必要があります。 ;)

if (ch >>> 15 != 0) // top bit set. 
関連する問題