Как найти самый значимый бит (MSB) - PullRequest
5 голосов
/ 28 сентября 2011

Я хочу знать, какое значение имеет первый бит байта.

Например:

У меня есть byte m = (byte) 0x8C;

Как я могу узнать, если первыйбит равен 1 или 0?

Кто-нибудь может мне помочь?

Ответы [ 5 ]

21 голосов
/ 28 сентября 2011

Это зависит от того, что вы подразумеваете под «первым битом».Если вы имеете в виду «старший значащий бит», вы можете использовать:

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

Или, если вы не возражаете, значения 0x80 или 0, просто используйте:

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

Или на самом деле, как boolean:

// Uses the fact that byte is signed using 2s complement
// True or false
boolean msb = m < 0;

Если вы имеете в виду младший значащий бит, вы можете просто использовать:

// 0 or 1
int lsb = m & 1;
3 голосов
/ 28 сентября 2011

Если первый бит является младшим (то есть бит 0), тогда

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

должен это сделать.

В общем

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

сообщит вам, установлен ли бит N. Если, однако, вы имели в виду старший бит (бит 7), используйте N = 7.

3 голосов
/ 28 сентября 2011

Предполагая, что вы имеете в виду крайний левый бит, поразрядно и 0x80, и проверьте, равен он нулю или нет:

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

Если вы имеете в виду бит младшего разряда, вам нужно будет и с 0x01 и проверить другое условие:

public boolean isFirstBitSet(byte b) {
    System.out.println((b & (byte)0x01));
    return (b & (byte)0x80) > 0;
}
1 голос
/ 28 сентября 2011

Это немного хак, но вы можете использовать

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

Это работает для byte, short, int, long типов данных.

Однакодля большинства типов самый простой подход - сравнить с 0

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

. Это работает для byte, short, int, long, float или double

(игнорируя отрицательный ноль и отрицательный NaN, большинство людей делают;)

Для char типа вам нужно знать количество бит.;)

if (ch >>> 15 != 0) // top bit set.
1 голос
/ 28 сентября 2011

Используйте побитовый и оператор.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...