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?
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?
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;
}
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.
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;
Era il bit più significativo. Grazie per il tuo aiuto –
@Jon Non capisco il primo perché è '0xff'? '0x80' è sufficiente. Penso che il modo giusto per farlo sia 'int msb = (m & 0x80) >>> 7;'. –
@ Eng.Fouad: Sì, andrebbe bene. Ho appena convertito abitualmente byte in int mascherando con 0xff :) –
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
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.
Che cosa significa "prima", in particolare? –