2017-06-12 105 views
0

一個32位寄存器,即status_reg具有1個字段(field_1 < 0:31>)。爲了設置和清除這個寄存器,我試圖獲得這個寄存器的掩碼值。所以一般以獲得掩碼值的計算公式爲:查找寄存器中較高和較低位置的掩碼值

mask = ((~(~0 << (hbit-lbit+1))) << lbit) 

在這種hbit較高位置位即31而LBIT較低位置比特i.e.0。 我期待mask值應該是0xFFFFFFFF。但是得到掩碼= 0.任何人都可以建議掩碼有什麼問題嗎?

我正在使用32位系統。

+0

如果你設置'hbit'爲'30'和'lbit'爲'1',你會得到'0x7FFFFFFE'的預期結果? – tilz0R

+4

你正在向左移動32,不能這樣做。從描述中看,首先看起來不需要任何掩碼,'status_reg'只有一個字段,它是整個int *,你甚至掩飾了什麼? – harold

+0

@harold是對的,你不需要掩碼來獲得整個寄存器值 – Toby

回答

0

它顯示未定義的行爲,因爲您左移了範圍以外32位。

1

我認爲你的代碼不會給你正確的掩碼。如果你喜歡掩碼,即6..10位,你可以使用(1<<(hbit-lbit+2))-1)<<lbit

相關問題