2012-09-18 48 views
1

下面是有關清除所有代碼的MSB的(最重要位)通過I(含)清楚MSB位都通過I(含)

public int clearBitsMSBThrough(int num, int i) { 
    int mask = (1 << (i + 1)) - 1; 
    return num & mask; 
} 

我感到困惑的「包容性」。 例如,如果數字是0011 1010且i = 3。 掩碼將爲0000 1111,結果爲0000 1010,但位置3中的位不會清零。

我誤解了這個問題嗎? 我認爲這應該是:

int mask = (1 << i) - 1; 
通過 binary subtraction
+0

'我誤解了這個問題?'問題是什麼? –

+0

問題是編寫一個方法來清除從MSB到i(包括)的所有位。謝謝! – marinama

+0

然後,它看起來像你已經知道問題和解決方案是什麼,因爲你說「我認爲它應該是:int mask =(1 << i)-1;'' –

回答

1
public int clearBitsMSBThrough(int num, int i) {  
    int mask = (1 << i) - 1; 
    return num & mask; 
} 

撇在這方面可能有所幫助。