C語言3🔥:運算符,運算符的基本用法
一、運算符🌿
🎇1.1 定義
運算符是指進行運算的動作,比如加法運算符"+“,減法運算符”-"
算子是指參與運算的值,這個值可能是常數,也可能是變量,還可能是一個方法的返回值
🎇1.2 單目運算符
只有一個算子的運算符: +,-
例如-a,-b,+a,+b
常用的單目運算符:
+ | 正值 |
---|---|
- | 負值 |
! | 邏輯反 |
& | 取地址 |
sizeof | 操作數的類型長度(計算的是變量/類型所占空間的大小,單位是字節) |
~ | 對一個數的二進制按位取反 |
(類型) | 強制類型轉換 |
🎇1.3 雙目運算符
-
我們已知,只有一個算子的運算符是單目運算符
-
那么, 有兩個算子的運算符就是雙目運算符
-
如:a+b,b-a
-
那么,有三個算子的運算符就是三目運算符
🎇1.4 賦值運算符
賦值(=) 也是運算,也有結果
舉個栗子:
a=6的結果是a被賦予的值,也就是6
a=b=6在計算機中可以看成是:a = (b=6),也就是,先把6賦給b(此時b的值就是6),然后再把b的值(6)賦給a,所以a的值也是6
=
+=
-=
*=
/=
&=
^=
I=
>>=
<<=
用法:
a+=3 相當于:a=a+3
a-=6 相當于:a=a-6
代碼示例如下:
#include <stdio.h>int main()
{int a=6,b=6; //初始化a+=3; //計算b=b+3;printf("a=%d,b=%d\n",a,b); //輸出運算結果return 0;
}
運行結果:
a=9,b=9
解析: a+=3 相當于 a=a+3,把a=6的值代入得:a=6+3 a的值:9
🎇1.5 運算符優先級
🎇1.6 算數運算符(特別重要)
+ | 加法運算符 |
---|---|
- | 減法運算符 |
* | 乘法運算符 |
/ | 除法運算符 |
% | 取余運算符 |
/ 的用法:
int a,b,c,d,e,f,g;a=5/2;
b=12345/10000;
c=12345/1000;
d=12345/100;
e=12345/10;printf("a=%d\nb=%d\nc=%d\nd=%d\ne=%d",a,b,c,d,e);
運行結果:
a=2
b=1
c=12
d=123
e=1234
解析:
a=5/2
5/2=2.5,由于a是整型(int),整形不包含小數部分,在計算時會把小數部分全部舍棄,所以a=5/2中a的結果是2
b=12345/10000 與e=12345/10 (我的想法:12345/10000,除數有幾個零,被除數就舍棄幾位數,如12345/10000,除數有4個零,那么被除數就舍棄后面四位數,所以答案就是:1)
由于b與e是整型(int),整形不包含小數部分,在計算時會把小數部分全部舍棄
所以b的值為1,e的值為1234。
% (取余) 的用法:
int a,b,c,d,e;a=1%3;
b=1%2;
c=30%90;
d=12345%10000;
e=12345%10;printf("a=%d\nb=%d\nc=%d\nd=%d\ne=%d",a,b,c,d,e);
運行結果
a=1
b=1
c=30
d=2345
e=5
解析:
a=1%3,c=30%90的解析如右 ,1向3取余,1除以3余1。同上30%90=30
1%2 1向2取余 1除以2=0.5,由于是int類型會舍棄小數,所以1/2的值只能是0,所以原來的除數1,還會留下了,所以1%2=1
d=12345%10000,e=12345%10
所以12345除以10000的余數就是:2345,12345除以10,余5
所以 :d=12345%10000=2345,e=12345%10=5
🎇1.7 關系運算符
“==” | 判斷相等 |
---|---|
“!=” | 不等于 |
“>” | 大于 |
“<” | 小于 |
“>=” | 大于等于 |
“<=” | 小于等于 |
關系運算符的結果:判斷如果結果是 true(真) 則為 1
判斷如果結果是 false(假)則為 0
用法:
int a=7,b=3,c;a==b //的值是0,因為a不等于b,所以是false(假),所以值是0
a!=b //的值是1,a不等于b,判斷正確,所以是true(真),所以值是1
🎇1.8 邏輯運算符
邏輯運算是對邏輯量進行的運算,結果只有0或者1
邏輯量是關系運算或邏輯運算的結果
用代碼表示: a大于等于1,小于等于6
a>=1 && a<=6;
邏輯優先級
! > && > ||
短路:
-
邏輯運算是自左向右進行的,如果左邊的結果已經能夠決定結果了,就不會做右邊的計算了
-
對于&&,左邊是false時就不會做右邊的運算了
-
對于||,左邊是true時就不會做右邊的運算了
-
不要把賦值,包括復合賦值組合進表達式
總體優先級排名:
優先級 | 運算符 | 結合性 |
1 | () | 從左到右 |
2 | !± ++ – | 從右到左(單目的+和-) |
3 | - / % | 從左到右 |
4 | + - | 從左到右 |
5 | < <= > >= | 從左到右 |
6 | == != | 從左到右 |
7 | && | 從左到右 |
8 | ||
9 | = += -= *= /= %= | 從右到左 |
🎇1.9 位運算符
“&” | 按位與 |
---|---|
“I” | 按位或 |
“<<” | 左移 |
“>>” | 右移 |
🎇1.10 條件運算符:
? : ;
如:
int count=30;count = (count>20)?count-10:count+10;意思是如果條件滿足,count如果>20;則count-10,否則就是執行count+10
也就是說:當count>20是 真(非零或1) 的時候執行前者,是 假(0) 執行后者
優先級:條件運算符的優先級高于賦值運算符,但是低于**其他運算符
🎇1.11 逗號運算符
逗號用來連接兩個表達式,并以其右邊的表達式的值作為它的結果。逗號的優先級是所有運算符中最低的,所以它兩邊的表達式會先計算;逗號的組合關系是自左向右,所以左邊的表達式會先計算,而右邊的表達式的值就留下來作為逗號運算的結果