位運算: 用於對整數型別(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...