2011-09-28 96 views
5

我想知道一個字節的第一位具有哪個值。如何找到最高有效位(MSB)

例如:

byte m = (byte) 0x8C;

我怎麼會知道,如果第一位是1還是0?

任何人都可以幫我嗎?

+3

「first」是什麼意思,具體是什麼意思? –

回答

3

假設你的意思是最左邊的位,位,並將其與0x80的,並檢查它是否是零,也沒有:

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

如果你的意思是最低階位,你將需要與0×01,檢查不同的條件:

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

如果第一位是最低位(即0位),然後

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

應該這樣做。

一般來說,

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

會給你是否有點N設置。 但是,如果您的意思是最高位(第7位),則使用N = 7。

21

這取決於你的意思是「第一位」。如果你的意思是「最顯著位」,你可以使用:

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

或者,如果你不介意的值是0x80的或0,只需使用:

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

或事實上,作爲一個boolean

如果你指的是至少顯著位,你可以使用:

// 0 or 1 
int lsb = m & 1; 
+0

這是最重要的一點。感謝您的幫助 –

+2

@Jon我不明白第一個爲什麼它是'0xff'? 「0x80」就夠了。我認爲正確的做法是int msb =(m&0x80)>>> 7;'。 –

+0

@ Eng.Fouad:是的,沒關係。我只是習慣性地通過用0xff掩碼將字節轉換爲int :) –

1

使用按位和運算符。

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

它的一個黑客位,但你可以使用

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

本工程爲byteshortintlong數據類型。

然而,對於大多數類型的最簡單的方法是用0

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

本工程爲byteshortintlongfloat,或double

(忽略負零和負NaN的比較,大多數人都這樣做)

對於char類型您需要知道位數。 ;)

if (ch >>> 15 != 0) // top bit set.