目錄
除以乙個變數,該變數的值為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表示正...