位(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; 輸出高,不改變其他位
這樣我們一目了然, 5告訴我們是第5位也就是第 6個埠, 1 告訴我們是設定為 1了。
Python 編碼 進製 位 位元組
基本概念 首先理解兩個概念,有些東西是為了讓機器認識的,有些東西是為了讓人認識的。進製 2,3,8,10,16 都是為了機器可以直接理解的。編碼 ascii,unicode,utf 8 把只有機器認識的二進位制體現為人一眼就能看明白的字元。基礎知識 二進位制 0 1 八進位制 0 7 十進位制 0 ...
位 位元組操作備忘
資料型別 1 char 乙個位元組,8位二進位制 2位16進製制0x00 0xff,十進位制 0 255 unsigned 或 128 127 signed 2 short 二個位元組,16位二進位制 4位16進製制0x0000 0xffff 十進位制 0 65535 unsigned 或 3276...
進製與位運算
1 理解個x進製的概念 每一位 只允許出現 0 x 1 這幾個數字,逢x進一,基是x,每一位有乙個權值大小是x的冪次。其表示的數值可以寫成按位權展開的多項式之和。十進位制 每一位只允許出現0 9這十個數字,逢十進1,基是十,每一位數字有乙個 權值大小是十的冪次。其表示的數值可以寫成按位權展開的多項式...