+,-,,正常運算就好,但"/"和"%"較爲特殊需要注意!
"/":
1)當該符號兩端數據類型都爲int時,輸出類型爲int 。若符號兩端數據類型不同時,則按精度小的類型進行計算。精度大的數被隱式類型轉換(編譯器自動轉換)爲精度小的類型。
2)當除數爲一個常數0時,編譯器彙報編譯錯誤。當除數爲一個一個變量,變量的值爲0時,編譯通過但運行時會錯。
"%":
1)該符號只針對int 整型有效。
2)當符號右端爲常數0或變量值爲0時,情況與"/"相同。
移位操作符(<<,>>)
ps:不要對負數進行移位操作,這是未定義行爲!
"<<"左移操作符:
1)按二進制移位;
2)左移n位相當於十進制的*2的n次方;
3)左邊拋棄,右邊補0;
4)左移後原數值在沒有被賦值的情況下是不變的;
#include<stdio.h>
#include<stdlib.h>
int main() {
int num = 10;
printf("%d\n",num<<1 );
printf("%d\n", num);
printf("%d\n", num=num<<1);
system("pause");
return 0;
}
結果爲:
">>"右移操作符:
1)按二進制移位;
2)右移n位相當於十進制的 / 2的n次方;
3)邏輯移位:左邊補0,右邊拋棄
算數移位:左邊補符號位,右邊拋棄
4)右移後原數值在沒有被賦值的情況下是不變的;(情況同上,不再做過多贅述)
ps:按二進制位操作,操作數必須爲整數
"&":
全1爲1,否則爲0
"|":
全0爲0,否則爲1
"^":
相同爲0,相異爲1
"~":
0變1,1變0
修改變量的值,可以連續連續賦值(例:a=x=y+1),但強烈不建議這麼寫,可讀性差。
ps:此處補充一點:賦值與初始化的區別
賦值:修改值
初始化:申請內存空間,放值到內存中
複合操作符(+= ,-= ,*= ,/= ,%= ,>>= ,<<= ,&= ,|= ,^= )
複合運算符與其他運算符功能一樣,但可以使代碼更簡潔
int x=10;
x=x+10;
x+=10;//複合賦值,效果與上式相同
單目操作符(!,- ,+ ,& ,sizeof ,~,--,++,* ,(類型))
"!"邏輯反操作
"-"負值
"+"正值
"&"取地址
"sizeof"操作數的類型長度(以字節爲單位):
編譯過程中求值,運行時才申請內存
"~"對一個數二進制按位取反
"--"前置,後置 --
"++"前置,後置++:
前置後置的區別:
a)不取表達式的值,等價
b)取表達式的值:
前置,返回自增(自減)後的值;
後置,返回自增(自減)前的值
" * "解引用操作符
"(類型)"強制類型轉換:
此處會發生“截斷”現象,即把一個佔字節數多的變量賦值給一個佔字節數少的變量,會把高位截斷。把一個佔字節少的變量賦值給一個佔字節數多的變量,高位會進行補位(補符號位)
在前面已經介紹了這些操作符,在此不再贅述,注意 = 和 == 書寫時不要出錯即可。
"&&":邏輯與
&&相當於and
" || ":邏輯或
|| 相當於 or
“短路求值”:
對於&&,若左側表達式值爲假,那麼右側不再求值,整個表達式結果爲假
對於 || ,若左側表達式值爲真,那麼右側不再求值,整個表達式結果爲真
如果表達式1結果爲真,則返回表達式2的值,否則返回表達式3的值
ps:優先級最低!!!
整個表達式的結果爲最後一個表達式的結果。
數組名+索引值,調用數組的值
類似於char/short這樣的類型,參與算數運算的時候會觸發整型提升,即隱式轉換爲int 型再參與運算!