如何找到最重要的位(MSB)

Joã*_*nes 5 java bit-manipulation

我想知道一个字节的第一位有哪个值.

例如:

我有 byte m = (byte) 0x8C;

我怎么知道第一位是1还是0?

谁能帮我吗 ?

Jon*_*eet 21

这取决于你的意思是"第一位".如果您的意思是"最重要的位",您可以使用:

// 0 or 1
int msb = (m & 0xff) >> 7;
Run Code Online (Sandbox Code Playgroud)

或者,如果您不介意值为0x80或0,请使用:

// 0 or 0x80
int msb = m & 0x80;
Run Code Online (Sandbox Code Playgroud)

或者实际上,作为boolean:

// Uses the fact that byte is signed using 2s complement
// True or false
boolean msb = m < 0;
Run Code Online (Sandbox Code Playgroud)

如果你的意思是最低有效位,你可以使用:

// 0 or 1
int lsb = m & 1;
Run Code Online (Sandbox Code Playgroud)

  • @Jon我不明白第一个为什么它是`0xff`?`0x80`就足够了.我认为正确的方法是`int msb =(m&0x80)>>> 7;`. (3认同)

Zug*_*alt 3

假设您的意思是最左边的位,按位和 0x80 并检查它是否为零:

public boolean isFirstBitSet(byte b) {
    System.out.println((b & (byte)0x80));
    return (b & (byte)0x80) < 0;
}
Run Code Online (Sandbox Code Playgroud)

如果您指的是最低阶位,则需要使用 0x01 并检查不同的条件:

public boolean isFirstBitSet(byte b) {
    System.out.println((b & (byte)0x01));
    return (b & (byte)0x80) > 0;
}
Run Code Online (Sandbox Code Playgroud)