2021年3月16日 星期二

bitwise operation--合宜地操作bits ("ORing" and mask bits)

 就某32bit data而言  (ex : *pRccCfg)

經初始化0b0

我們把bit 22設定為1 之後 (by instruction : 「 *pRccCfg|= (1<<22) ; 」)

要把bit 24~26設定為0b110,又不能動到之前設定的其他bit值,如何是好?

作法1.一個bit一個bit設定

*pRccCfg!=(1<<25)

*pRccCfg!=(1<<26)

作法二,用罩除的方式,比較不建議請注意"~"的用法

*pRccCfg!=(7<<24); // "OR" the 3 bits by  0b111 

*pRccCfg &=~(1<<24);//shift the bit ,then "Complement them",then,use "AND" opeartion,

------------------------------------------------------------------------

同理,只是想清除某幾個bit,也是先 shift "on" bits ,"Complement  them",then ,use "AND"operation

ex:要把21&22 bits清除,但不要動到其他bits,請用以下方式

*pAddrRccCfg &=~(0x3<<21);

務必注意!!

~(0x3<<21) 是

11111111100111111111111111111111

而(~0x3<<21) 是

11111111100000000000000000000000 

千萬要注意順序