嵌入式C學習第一次任務

2021-10-18 19:02:40 字數 2372 閱讀 6944

位運算: 用於對整數型別(int,char, long 等)變數的二進位制形式的 某一位(bit),或者若干位進行操作。

&      按位與

|      按位或

^      按位異或

~      按位取反

<<     左移(左邊消失,右邊補0)

>>     右移(右邊消失,左邊補符號位)

位運算的運算元是整數型別或字元型.

1.  將參與運算的兩運算元各對應的二進位制位進行與 操作,只有對應的兩個二進位均為1時,結果的對 應二進位制位才為1,否則為0。

例如:表示式「21 & 18 」的計算結果是16 (即二進位制數10000),因為: 

21 用二進位制表示就是:   0000 0000 0000 0000 0000 0000 0001 0101  

18 用二進位制表示就是:      0000 0000 0000 0000 0000 0000 0001 0010

二者按位與所得結果是:  0000 0000 0000 0000 0000 0000 0001 0000 

即通俗來講1與1為1,出現0為0

同理如上,0與0為0,出現1為1

同理如上,不相同為1,相同為0

例如:表示式「21 ^ 18 」的值是7(即二進位制數111)。 

21:   0000 0000 0000 0000 0000 0000 0001 0101  

18:   0000 0000 0000 0000 0000 0000 0001 0010

21^18: 0000 0000 0000 0000 0000 0000 0000 0111 

把0變1,1變0

例如,表示式「~21」的值是整型數 0xffffffea 

21:  0000 0000 0000 0000 0000 0000 0001 0101  

~21: 1111 1111 1111 1111 1111 1111 1110 1010 

a << b就表示把a轉為二進位制後左移b位(在後面添b個0)。例如100的二進位制為1100100,而110010000轉成十進位制是400,那麼100 << 2 = 400。可以看出,a << b的值實際上就是a乘以2的b次方,因為在二進位制數後添乙個0就相當於該數乘以2(這樣做要求保證高位的1不被移出)。

a >> b表示二進位制右移b位(去掉末b位)

所有未加static字首的全域性變數(這裡的全域性變數指在原始檔的開頭處,不包含在原始檔的任何函式內)和函式都具有全域性可見性,其它的原始檔也能訪問。static宣告的函式和變數不能在另乙個檔案中引用,也就是說,如果加了 static,就會對其它原始檔隱藏,無法進行呼叫。

利用這一特性可以在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。static 可以用作函式和變數的字首,對於函式來講,static 的作用僅限於隱藏,而對於變數,static 還有下面兩個作用。

總結:首先 static 的最主要功能是隱藏,其次因為 static 變數存放在靜態儲存區,所以它具備永續性和預設值0。

extern最基本的用法是宣告全域性變數的。這裡需要注意兩點,一是「宣告」,二是「全域性變數」;我們先來分析這兩個概念。

宣告:宣告和定義是有區別的。宣告不等於定義,宣告只是指出了變數的名字,並沒有為其分配儲存空間;定義指出變數名字同時為變數分配儲存空間,定義包含了宣告。例如:

extern  int  i;  //宣告變數i,但沒分配儲存空間,還不能使用。

int  i;         //定義了變數i,並分配了空間,可以使用。

注意:在程式中乙個變數可以宣告多次,但只能定義一次。

如果宣告時有初始化式,也會被當做定義,例如:

extern  int  i = 5; //定義了變數5

後面的程式中若再出現extern  int  i = 5;或者int  i;的語句,就會出錯,因為變數只能定義一次。

全域性變數:通俗講,在函式內部定義的變數稱為區域性變數,它的作用域是從定義處知道函式結束;在函式外部定義的稱為全域性變數,它的作用域是從定義處直到檔案結束。

注意:不管是全域性變數還是區域性變數,作用域都是從定義處開始的。例如:

int main()

編譯器就會知道i是乙個不允許被修改的常量

3:可以節省空間,避免不必要的記憶體分配,因為編譯器通常不為const常量分配記憶體空間,而是將它儲存在符號表中,這樣就沒有了儲存於讀記憶體的操作,使效率也得以提高;

4:可以很方便的進行引數的修改和調整,同時避免意義模糊的數字出現;

嵌入式C學習第一次任務

數學中的並且,遇0則清0 數學中的或者,1或0為1 1 0 或1 0 為1 0 按位異或,如果兩個相應的二進位制位值不同則為1,否則為0。取反,1變0 0變1 右移,是將乙個二進位制位的運算元按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位或者一律補0或者補符號位 左移,是將乙個二進位制位的運...

嵌入式C學習第一次任務

運算子描述 按位與操作,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 假設a 的值為 60 0011 1100 變數 b 的值為 13 0000 1101 則 a b 將得到 12,即為 0000 1100運算子描述 按位或運算子,按二進位制位進行 或 運算。...

第一次嵌入式C 學習

資料 乘法 2 二進位制下的移位 例如 m 1 m 2 m n m 2 n 4 0 0 1 0 0 8 0 1 0 0 0 第一位與符號變數有關 除法 m n m 2 n int a a n unsigned int a a n a 0 0 遮蔽,遮蔽低八位 a 1 1 取出,取出高八位 清0器 a...