一個32位寄存器,即status_reg具有1個字段(field_1 < 0:31>)。爲了設置和清除這個寄存器,我試圖獲得這個寄存器的掩碼值。所以一般以獲得掩碼值的計算公式爲:查找寄存器中較高和較低位置的掩碼值
mask = ((~(~0 << (hbit-lbit+1))) << lbit)
在這種hbit較高位置位即31而LBIT較低位置比特i.e.0。 我期待mask值應該是0xFFFFFFFF。但是得到掩碼= 0.任何人都可以建議掩碼有什麼問題嗎?
我正在使用32位系統。
如果你設置'hbit'爲'30'和'lbit'爲'1',你會得到'0x7FFFFFFE'的預期結果? – tilz0R
你正在向左移動32,不能這樣做。從描述中看,首先看起來不需要任何掩碼,'status_reg'只有一個字段,它是整個int *,你甚至掩飾了什麼? – harold
@harold是對的,你不需要掩碼來獲得整個寄存器值 – Toby