Chcę wiedzieć, która wartość ma pierwszy bit bajtu.Jak znaleźć najbardziej znaczący bit (MSB)
Na przykład:
mam byte m = (byte) 0x8C;
Jak mogłem wiedzieć, czy pierwszy bit jest 1 lub 0?
Czy ktoś może mi pomóc?
Chcę wiedzieć, która wartość ma pierwszy bit bajtu.Jak znaleźć najbardziej znaczący bit (MSB)
Na przykład:
mam byte m = (byte) 0x8C;
Jak mogłem wiedzieć, czy pierwszy bit jest 1 lub 0?
Czy ktoś może mi pomóc?
Zakładając, że myśli skrajnie lewą bitów, bitowego i to 0x80 i sprawdzić, czy jest zerowy ani nie:
public boolean isFirstBitSet(byte b) {
System.out.println((b & (byte)0x80));
return (b & (byte)0x80) < 0;
}
Jeśli oznaczać najniższy bit zamówienie trzeba będzie iz 0x01 i sprawdzić inny warunek:
public boolean isFirstBitSet(byte b) {
System.out.println((b & (byte)0x01));
return (b & (byte)0x80) > 0;
}
Jeśli pierwszy bit jest najniższy bit (czyli bit 0), a następnie
if((m & 1) >0) ...
powinien to zrobić.
Ogólnie
if ((m & (1<<N)) > 0) ...
da wam, czy nieco N
jest ustawiony. Jeśli jednak chodziło Ci o najwyższy bit (bit 7), użyj N = 7.
Zależy od tego, co masz na myśli przez "pierwszy bit". Jeśli masz na myśli „najbardziej znaczący bit” można użyć:
// 0 or 1
int msb = (m & 0xff) >> 7;
Lub jeśli nie przeszkadza wartości bycia 0x80 lub 0, wystarczy użyć:
// 0 or 0x80
int msb = m & 0x80;
A w rzeczywistości, jako boolean
:
Jeśli masz na myśli najmniej znaczący bit, można po prostu użyć:
// 0 or 1
int lsb = m & 1;
To był najbardziej znaczący fragment. Dziękuję za pomoc –
@Jon Nie rozumiem tego pierwszego, dlaczego to '0xff'? "0x80" wystarczy. Myślę, że właściwą metodą jest "int msb = (m & 0x80) >>> 7;'. –
@ Eng.Fouad: Tak, byłoby dobrze. Po prostu nawracam bajt na int przez maskowanie z 0xff :) –
Użyj bitowego i operatora.
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
Its a bit hack, ale można użyć
if(x >> -1 != 0) // top bit set.
Działa to dla byte
, short
, int
, long
typów danych.
Jednak dla większości typów najprostszym sposobem jest porównanie z 0
if (x < 0) // top bit set.
Działa to dla byte
, short
, int
, long
, float
lub double
(ignorując negatywne zerowy i ujemny NaN, większość ludzi robi;)
Dla typu char
musisz znać liczbę bitów. ;)
if (ch >>> 15 != 0) // top bit set.
Co oznacza "pierwszy", a konkretnie? –