C語言操作符總結+詳解!
阿新 • • 發佈:2018-11-02
下表即為C語言全部常用的操作符
操作符的優先順序從高至低按由上到下的順序排列
操作符 | 描述 | 用法示例 | 結果型別 | 結合性 | 是否控制求值順序 |
---|---|---|---|---|---|
() | 聚組 | (表示式) | 與表示式相同 | N/A | 否 |
() | 函式呼叫 | rexp(rexp,…,rexp) | rexp | L-R | 否 |
[ ] | 下標引用 | rexp[rexp] | lexp | L-R | 否 |
. | 訪問結構成員 | lexp.member_name | lexp | L-R | 否 |
-> | 訪問結構指標成員 | rexp->member_name | lexp | L-R | 否 |
++ | 字尾自增 | lexp ++ | rexp | L-R | 否 |
- - | 字尾自減 | lexp – | rexp | L-R | 否 |
! | 邏輯反 | ! rexp | rexp | R-L | 否 |
~ | 按位取反 | ~ rexp | rexp | R-L | 否 |
+ | 單目,表示正值 | + rexp | rexp | R-L | 否 |
- | 單目,表示負值 | - rexp | rexp | R-L | 否 |
++ | 字首自增 | ++ lexp | rexp | R-L | 否 |
– | 字首自減 | – lexp | rexp | R-L | 否 |
* | 間接訪問 | * rexp | lexp | R-L | 否 |
& | 取地址 | & lexp | rexp | R-L | 否 |
sizeof | 取其長度,以位元組表示 | sizeof(型別) | rexp | R-L | 否 |
(型別) | 型別轉換 | (型別) rexp | rexp | R-L | 否 |
* | 乘法 | rexp * rexp | rexp | L-R | 否 |
/ | 除法 | rexp / rexp | rexp | L-R | 否 |
% | 整數取餘 | rexp % rexp | rexp | L-R | 否 |
+ | 加法 | rexp + rexp | rexp | L-R | 否 |
- | 減法 | rexp - rexp | rexp | L-R | 否 |
<< | 左移位 | rexp << rexp | rexp | L-R | 否 |
>> | 右移位 | rexp >> rexp | rexp | L-R | 否 |
> | 大於 | rexp > rexp | rexp | L-R | 否 |
>= | 大於等於 | rexp >= rexp | rexp | L-R | 否 |
< | 小於 | rexp < rexp | rexp | L-R | 否 |
<= | 小於等於 | rexp <= rexp | rexp | L-R | 否 |
== | 等於 | rexp == rexp | rexp | L-R | 否 |
!= | 不等於 | rexp != rexp | rexp | L-R | 否 |
& | 位與 | rexp & rexp | rexp | L-R | 否 |
^ | 位異或 | rexp ^ rexp | rexp | L-R | 否 |
豎槓 | 位或 | rexp | rexp 豎槓rexp | L-R | 否 |
&& | 邏輯與 | rexp && rexp | rexp | L-R | 是 |
雙豎槓 | 邏輯或 | rexp 雙豎槓 rexp | rexp | L-R | 是 |
?: | 條件操作符 | rexp ? rexp : rexp | rexp | N/A | 是 |
= | 賦值 | lexp = rexp | rexp | R-L | 否 |
+= | 以…加 | lexp += rexp | rexp | R-L | 否 |
-= | 以…減 | lexp -= rexp | rexp | R-L | 否 |
*= | 以…乘 | lexp *= rexp | rexp | R-L | 否 |
/= | 以…除 | lexp /= rexp | rexp | R-L | 否 |
%= | 以…取模 | lexp %= rexp | rexp | R-L | 否 |
<<= | 以…左移 | lexp <<= rexp | rexp | R-L | 否 |
>>= | 以…右移 | lexp >>= rexp | rexp | R-L | 否 |
&= | 以…與 | lexp &= rexp | rexp | R-L | 否 |
^= | 以…異或 | lexp ^= rexp | rexp | R-L | 否 |
豎槓= | 以…或 | lexp 豎槓= rexp | rexp | R-L | 否 |
, | 逗號 | rexp,rexp | rexp | L-R | 是 |
(由於表格編輯問題,表中的“|”用“豎槓”代替)
操作符的分類:
算術操作符
+ - * / %
除了%操作符只能用於整數外,其他幾個操作符可以用於整數和浮點數。
對於/操作符如果兩個操作符都為整數,執行整數除法,當存在浮點數時就執行浮點數除法。
移位操作符
<< //左移
>> //右移
移位在二進位制下進行
左移操作符規則:左邊拋棄,右邊補0
int num = 10;
num<<1
num在記憶體中的二進位制00000000000000000000000000001010
變為00000000000000000000000000010100
右移操作符規則:
分為兩種:1.邏輯移位左邊用0填充,右邊丟棄
2.算術移位左邊用原該值的符號位填充,右邊丟棄
具體使用哪一種取決於編譯器
另外,不要移動負數位
num>>-1; //錯誤的使用
位操作符
& //按位與 兩個二進位制數比較,相同位數上的數一樣返回值位1
| //按位或 相同位數上有1返回值就為1
^ //按位異或 相同位數上的數相同返回值為0,相異返回值為1
注:它們的運算元必須是整數。
輸入如下程式碼看看它們的值是多少
#include <stdio.h>
int main()
{
int num1=2;
int num2=2;
int a = num1 & num2;
int b = num1 | num2;
int c = num1 ^ num2;
printf(“%d %d %d”,a,b,c)
return 0;
}
位操作符的妙用
不建立臨時變數,實現兩個數的交換
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}
賦值操作符
int a = 1;
a = 100;
複合賦值符
+= *= /= %= >>= <<= &= |= ^=
單目操作符
! - + & sizeof ~ -- ++ * (型別)
關係操作符
> >= < <= != ==
邏輯操作符
&& 邏輯與
|| 邏輯或
條件操作符
exp1 ? exp2 : exp3
逗號表示式
exp1, exp2, exp3, ...
下表引用、函式呼叫和結構成員
1.[]下標引用操作符
int arr[10];
arr[9] = 10;
這裡也可以用9[arr]
來表示
2.()函式呼叫操作符
int main
{
test1();
test2(1);
}
3 .訪問結構成員
結構體.成員名
結構體指標->成員名
#include <stdio.h>
struct Stu
{
char name[10];
int age;
char sex[5];
double score;
};
void set_age1(struct Stu stu)
{
stu.age = 18;
}
void set_age2(struct Stu* pStu)
{
pStu->age = 18;//結構成員訪問
}
int main()
{
struct Stu stu;
struct Stu* pStu = &stu;//結構成員訪問
stu.age = 20;//結構成員訪問
set_age1(stu);
pStu->age = 20;//結構成員訪問
set_age2(pStu);
return 0;
}