2011-09-28 19 views
5

Desidero sapere quale valore ha il primo bit di un byte.Come trovare il bit più significativo (MSB)

Ad esempio:

ho byte m = (byte) 0x8C;

Come potevo sapere se il primo bit è un 1 o uno 0?

Qualcuno può darmi una mano?

+3

Che cosa significa "prima", in particolare? –

risposta

3

Supponendo che vuoi dire bit più a sinistra, bit per bit e con 0x80 e verificare se è pari a zero, né no:

public boolean isFirstBitSet(byte b) { 
    System.out.println((b & (byte)0x80)); 
    return (b & (byte)0x80) < 0; 
} 

Se vuoi dire più basso bit di ordine sarà necessario e con la 0x01 e verificare una condizione diversa:

public boolean isFirstBitSet(byte b) { 
    System.out.println((b & (byte)0x01)); 
    return (b & (byte)0x80) > 0; 
} 
3

Se il primo bit è il bit più basso (cioè bit 0), quindi

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

dovrebbe farlo

In generale,

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

vi darà o meno po N è impostato. Se, invece, intendevi il bit più alto (bit 7), quindi usa N = 7.

21

Dipende da cosa intendi per "primo bit". Se vuoi dire "bit più significativo" è possibile utilizzare:

// 0 or 1 
int msb = (m & 0xff) >> 7; 

Oppure, se non ti dispiace essere i valori 0x80 o 0, basta usare:

// 0 or 0x80 
int msb = m & 0x80; 

o di fatto, come un boolean :

Se si intende il bit meno significativo, si può semplicemente utilizzare:

// 0 or 1 
int lsb = m & 1; 
+0

Era il bit più significativo. Grazie per il tuo aiuto –

+2

@Jon Non capisco il primo perché è '0xff'? '0x80' è sufficiente. Penso che il modo giusto per farlo sia 'int msb = (m & 0x80) >>> 7;'. –

+0

@ Eng.Fouad: Sì, andrebbe bene. Ho appena convertito abitualmente byte in int mascherando con 0xff :) –

1

Utilizzare bit e operatore.

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

sua un po 'di un hack, ma è possibile utilizzare

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

Questo funziona per byte, short, int, long tipi di dati.

Tuttavia per la maggior parte l'approccio più semplice è quello di confrontare con 0

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

Questo funziona per byte, short, int, long, float, o double

(Ignorando zero negativo e negativo NaN, la maggior parte delle persone lo fa;)

Per il tipo char è necessario conoscere il numero di bit. ;)

if (ch >>> 15 != 0) // top bit set. 
Problemi correlati