C語言操作符總結

2021-09-18 04:26:49 字數 1703 閱讀 7028

目錄

除以乙個變數,該變數的值為0,會導致執行時出錯。

除以乙個常量0,編譯器就會編譯錯誤。  計算機上的資訊都是按照二進位制儲存的,左移<<2相當於*2(左側丟棄,右側補0),右移》2分為邏輯右移:左側補0和算術右移:左側補符號位(相當於/2),右移大多都是算術右移。

左移n位:*2^n  &:按位與,有0則0

|:按位或,有1則1

^:按位異或,同0異1

~:按位取反,01互換

不建立臨時變數,實現兩個數的交換

#includeint main()

乙個整數儲存在記憶體中的二進位制中1的個數(通過移位)
#include int main()

printf("二進位制中1的個數 = %d\n",count);

return 0;

}

初始化和賦值不同,常量可以賦值但不能初始化,陣列可以用{}進行初始化,但不能用{}進行賦值

描述格式化字串時需要有三個部分,幾進製,有無符號,整數/浮點數

eg:%d:十進位制 有符號 整數,%x:十六進製制 無符號 整數  sizeof不是函式,而是乙個操作符,表示運算元的型別長度(以位元組為單位),可求變數(型別)所佔空間的大小。

sizeof編譯時直接求值,沒有涉及到記憶體訪問,所以int arr[10]中sizeof(arr[10])=4

如果不取表示式的值,前置和後置是等價的,如果取值的話,前置++返回的是自增之後的值,後置++返回的是自增之前的值。

++num:

num += 1;

return num;

num++:

int tmp = num;

num += 1;

return tmp;

後置++需要引入乙個臨時變數,所以前置++效率更高。  所有關係操作符的結果只有兩個:0或1.  在c語言中可以使用巨集來定義邏輯操作符。
#define and &&

#define or ||

短路求值:

對於&&,如果左側的表示式值為假,那麼右側的表示式不在求值。

對於||,如果左側的表示式值為真,那麼右側的表示式不在求值。  c語言中唯一乙個三目運算子,相當於if-else的簡寫。  逗號表示式的值是最後乙個引數的值。  陣列下標引用:乙個陣列名+[乙個索引值]。

( ) 函式呼叫操作符 接受乙個或者多個運算元:第乙個運算元是函式名,剩餘的運算元就是傳遞給函式的引數。

訪問乙個結構體成員:. 結構體.成員名 或 -> 結構體指標->成員名  隱式型別轉換=型別轉換+整型提公升。

型別轉換優先順序:long double>double>float>unsigned long int>long int>unsigned int>int

比int更小的型別就會產生整型提公升

類似於char/short這樣的型別,參與算數運算的時候會觸發 整型提公升(隱式轉換為int,再參與運算) ,比int小的型別都要轉換為int進行操作,整型提公升主要受限於cpu的具體結構。

型別轉換產生的問題:

把乙個佔記憶體大的變數賦值為乙個記憶體小的變數——會觸發截斷

把乙個佔記憶體小的變數賦值為乙個記憶體大的變數——高位會進行補位(補符號位)  優先順序不用管,直接加括號就行了。

如果在乙個表示式中多次修改同乙個變數,這樣的結果是未定義行為(所以,不能這樣寫),主要是因為表示式求職順序不一致

注意表示式求值順序

C語言操作符總結

c語言操作符總結 1.算數操作符 有浮點數則為浮點除法 全為整形 2.移位操作符 所有的移位操作符都是二進位制移位 左移 效果 左邊拋棄右邊補0.右移 效果 1 符號位 算術移位 原該值的符號位 2 0 邏輯移位 警告 不要移動負數字 3.位操作符 按位與 按位或 按位異或 注意 全都為二進位制位操...

C語言 操作符總結

1.運算操作符 加 可作為正號 例 a b 4 減 可作為正號 例 a b 5 乘 例 a b 除 例 a b 注意 分母不能為零 取餘 運算操作符的使用方法,基本與數學上的使用一致 2.賦值操作符 例 a 2 可讀為將2賦給a 注意 從右向左進行運算 3.其他符賦值操作符 例 a 1 相當於 a ...

C語言操作符總結

1.操作符的兩個運算元必須為整數,返回的是整除後的餘數。2.對於 操作符,如果兩個運算元都是整數則執行整數除法,只要有浮點數就執行浮點數除法。左移操作符 右移操作符 左邊拋棄,右邊補0 右移分為兩種 1.邏輯移位 左邊用0補,右邊丟棄 2.算術移位 左邊用原來的符號位填充,右邊丟棄 符號位中0表示正...