2011-09-28 14 views

Odpowiedz

3

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; 
} 
3

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.

21

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

To był najbardziej znaczący fragment. Dziękuję za pomoc –

+2

@Jon Nie rozumiem tego pierwszego, dlaczego to '0xff'? "0x80" wystarczy. Myślę, że właściwą metodą jest "int msb = (m & 0x80) >>> 7;'. –

+0

@ Eng.Fouad: Tak, byłoby dobrze. Po prostu nawracam bajt na int przez maskowanie z 0xff :) –

1

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 
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.