位、字節、進制梳理與位操作

數據類型(位、字節、進制)

位(bit)是計算機最基礎也是最小的數據度量
位是二進制數例如:10101010 每一個數字便是一位(bit)
字節 每一字節有8位8bit
進制是進制,位是位
16進制數0XFFFFFFFF
其中0X是16進制數的標誌,表示標誌後面的數是16進制的
其中每一個F可以表示成二進制數 1111 所以 每一個16進制數(單獨的一個數,不是指整個數)佔有 4 bit、半個字節
選取高進制的好處是能夠縮短數據長度

例如:十進制數 65535 16進制可以表示爲 FFFF換算成 2進制則爲 1111 1111 1111 1111

stm32是32位的單片機代表其可以處理的最長數據位32位最大值爲 2^32 即可以表示爲0x ffff ffff

位操作運算

符號 功能 作用
& 按位與 全爲1才判斷是1
1 按位或 全爲0才判斷是0
^ 按位異或 一樣爲0不一樣爲1
~ 取反 0爲1,1爲0
<< 左移 0101變成1010
>> 右移 0101變成0010

左移右移,移出的那一位置補0
1111<< = 1110 1111>> = 0111
在語法中常常寫做a&=b即是a=a&b的縮寫
a|=b a=a|b
GPROA_>BSRR |=0X01 //不改變前7位的值,將第零位置爲1
GPROA_>BSRR &=~0X01 //也不改變前七位的值,將第零位置爲0
TIMx->SR = (uint16_t)~TIM_FLAG; //也是把某位置零的操作

寫法上的小技巧:
GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
這個操作就是將 BSRR寄存器的第pinpos位設置爲1,爲什麼要通過左移而不是直接設置一個固定的值呢?其實,這是爲了提高代碼的可讀性以及可重用性。這行代碼可以很直觀明瞭的知道,是將第 pinpos位設置爲1。如果你寫成 GPIOx->BSRR =0x0030; 這樣的代碼就不好看也不好重用了。
類似這樣的代碼很多:
GPIOA->ODR|=1<<5; //PA.5 輸出高,不改變其他位
這樣我們一目瞭然, 5告訴我們是第5位也就是第 6個端口, 1 告訴我們是設置爲 1了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章