位 位元組 進製梳理與位操作

2021-08-21 17:13:38 字數 1205 閱讀 4635

位(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,基是十,每一位數字有乙個 權值大小是十的冪次。其表示的數值可以寫成按位權展開的多項式...