1. 程式人生 > >C語言操作符總結(含程式碼講解)

C語言操作符總結(含程式碼講解)

C語言基本操作符分為算術操作符、移位操作符、位操作符、賦值操作符、複合賦值符、單目操作符、關係操作符、邏輯操作符、條件操作符、逗號表示式、下表引用、函式呼叫、結構成員。
算術操作符:+(加) - (減) * / %
貼別提醒:/(1)當/左右兩個數字均為整形(int)時,結果為整數。(如5/3=1)
(2)當/左右有任何一個為float或double時,結果為浮點型。(如5.0/3=1.6666…)
% 此運算子左右數字必須為int型。
移位操作符:>>(右移操作符) <<(左移操作符)
當一個數字為正整數

時,轉化為二進位制右移一位有除二效果;左移一位有乘二效果。
例如:15(十進位制)00000000000000000000000000001111(二進位制)
右移一位(左邊補0,右邊摒棄) 00000000000000000000000000000111(二進位制) 結果為數字7
左移一位(右邊補0,左邊摒棄) 00000000000000000000000000011110(二進位制) 結果為數字30
當數字為負數時,計算機儲存的是該數的補碼。
例如:-1
10000000000000000000000000000001(原碼)
11111111111111111111111111111110(反碼)
11111111111111111111111111111111(補碼)(反碼加1為補碼)
最高位1代表負數,0代表正數。
所以a>>=1時結果不發生變化,a<<=1發生變化。
貼別提醒:a>>-1這種表達形式是不合法的,左移右移操作符後面數字必須為正整數。

位操作符:&(按位與) |(按位或) ^(按位異或)
例如:3&4 011&101 結果為001 (按位與真真為真,所以只有1+1=1)
3|4 011|101 結果為111(按位或一方為真且為真,所以1+0=1,1+1=1)
按位異或相同為0,相異為1(二進位制按位異或與數字無關)
不建立第三個變數交換兩個數可用異或。
邏輯操作符:&&(邏輯與) ||(邏輯或)
位操作符與邏輯操作符的區分:
1&2 結果為0
1&&2 結果為1
1|2 結果為3
1||2 結果為1
賦值操作符:=
複合賦值符:+= *= /= %= >>= <<= &= |= ^=
單目操作符:
!(邏輯反操作)+(正數) -(負數)&(取地址) sizeof(運算元的型別長度)~(對二進位制按位取反) --(前置、後置) ++(前置、後置) *(解引用操作符) (型別)(強制型別轉換)
例如:!0=1,!10=0(非零為真(1),非真為假(0))
sizeof為操作符,非函式。int a=4,sizeof(int)=sizeof(a)=4
前置—— ++ 為先執行再賦值
後置—— ++為先賦值再運算
例如:
360面試題

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int i = 0, a = 0, b = 2, c = 3, d = 4;
 i = a++ && ++b && d++;
 printf("a=%d\tb=%d\tc=%d\td=%d\n", a, b, c, d);
 system("pause");
 return 0;
}


&&(邏輯與)運算子,真真且為真,一假就為假。題a++先賦值再運算,即a=0,整個式子為假,b,c,d不參與運算,++再賦給a,結果為a=1,b=2,c=3,d=4.

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int i = 0, a = 0, b = 2, c = 3, d = 4;
 i = a++ || ++b || d++;
 printf("a=%d\tb=%d\tc=%d\td=%d\n", a, b, c, d);
 system("pause");
 return 0;
}

||(邏輯或)運算子,一真且為真,一假繼續判斷後面的。此題中++b,b=3,式子為真,c,d不參與運算,所以結果為a=1,b=3,c=3,d=4.
條件操作符:(三目運算子)
exp1?exp2:exp3
判斷exp1,如為真直接執行exp2,如為假直接執行exp3.
逗號操作符:
exp1,exp2,exp3…expN
從左到右依次運算,但結果只為最後一個表示式的結果。
下標引用操作符: [ ] (對應兩個運算元)
例如:arr[10] 寫成10[arr]也是正確的
函式呼叫操作符:( )(至少對應一個運算元)
例如:ADD(a,b)(三個操作符,一個為函式名,剩餘為傳給函式的引數)
訪問結構體成員
struct student{
};
隱式型別轉換:
C的整形算術運算總是至少以預設的整形型別精度來進行,為了計算這個精度,表示式中字元和短整型運算元在使用之前都要轉化成普通整型,這個轉換稱為整型轉換.
操作符的屬性:
1.操作符的優先順序
2.操作符的結合性
3.是否控制求值順序
操作符優先順序: