一站式學習C程式設計 學習筆記 2 運算子詳解

2021-06-18 11:37:20 字數 1050 閱讀 6931

定義: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 條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個...