定義:c語言中提供的可以直接操作整數中的位的運算子;
1.1按位與、或、異或、取反運算
c語言中並不存在8位整數的位運算,故而運算元在做位運算之前都至少被提公升為int型。
注意提公升為整數後高位填充的0或者1在取反時都要進行運算的,千萬不要忽視!!!
1.2移位運算
注意:移位的位數必須小於左運算元的總位數;
在一定的取值範圍內,講乙個整數左移一位相當於乘以2;
建議只對無符號數做位運算,以減少出錯的可能。
1.3掩碼
對給定整數中的某些位進行處理;
1.4異或運算的特性:
①與自己做異或結果為0;
②與0異或還為自己,與1異或為相反值;
☂奇偶校驗
④最神奇的功效:交換兩個變數的值
常用方法: temp=a;a=b;b=temp;
借助於位運算==> a=a^b;b=b^a;a=a^b;
第二步中,b=b^(a^b)=b^a^b=a;
第三步中,同理可得a=b;
練習1:
不得借助額外的空間,交換兩個變數的值;
還有一種方案:
a=a+b;
b=a-b;
a=a-b;
不過,大家應該會更傾向於位運算;
二、其他運算子
2.1復合賦值運算子
例:a+=1;<=等價於=>a=a+1;但其實是有差距的,前者只計算一次a,後者需要兩次,即會存在效率問題;
當有side effect時,則執行的最終結果不同;
2.2條件運算子
表示式1?表示式2:表示式3
表示式1必須為標量;
表示式2和表示式3的型別要求一致;
2.3逗號運算子
左結合,但最終只返回最右邊表示式的值作為最終結果。
2.4sizeof運算子與typedef型別宣告
sizeof表示式;該表示式中的子表示式並不求值;因為在編譯階段就已經知道該子表示式的型別了,故而無需再執行階段進行計算;
注意:sizeof的執行結果是size_t,該型別定義在標頭檔案stddef.h中;
Linux C程式設計一站式學習 筆記
關於程式的討論裡提到了c語言的可移植,原本不知道為什麼,現在知道,原來是因為各種平台上都有c語言的編譯器,這就好像是一種由於廣泛使用而成為規範的東西一樣,當所有機器上都有你的編譯器的時候,你的可移植性當然強了。之前看v6shell的 就沒明白詞法和語法有什麼差別,這裡講到了詞法就是單詞 token ...
Linux C程式設計一站式學習 筆記
1變數宣告與函式宣告有一點不同,函式宣告的extern關鍵字可以省略,而變數宣告不寫extern意思完全不同,表示為定義了乙個區域性變數。2static關鍵字宣告具有internal linkage,這些函式變數作用域僅限本檔案,則不想被外部檔案所訪問的變數和函式就可以宣告為static。3用角括號...
Linux C程式設計一站式學習
北京亞嵌教育研究中心 ps ef grep sctp grep全稱是global regular expression print,表示全域性正規表示式.gdb除錯又看一遍。迅速用起 pthread cond timedwait 條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個...