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