App下載

從零開始學(xué)習(xí)C語言丨認(rèn)識(shí)運(yùn)算符

來源: 三玹 2022-11-02 16:19:49 瀏覽數(shù) (2716)
反饋

 本文發(fā)布于微信公眾號(hào):三玹
哈嘍,各位朋友們好啊!馬上就要國慶節(jié)了,工作上的事情也變得愈發(fā)的繁忙了,難得抽個(gè)空來寫一寫文章。
前面學(xué)了C語言中的指針類型,其實(shí)關(guān)乎于指針的內(nèi)容還有很多沒有涉及到,我也不想一開始就學(xué)這么復(fù)雜的,否則把自己搞得昏頭昏腦的,那不是純純的勸退。這篇文章,我們就來聊一聊簡單的內(nèi)容,運(yùn)算符。
計(jì)算機(jī)的誕生,本身是為了解決數(shù)學(xué)問題,因此可以說計(jì)算機(jī)領(lǐng)域是數(shù)學(xué)領(lǐng)域的延伸。既然有關(guān)數(shù)學(xué),那自然就離不開一些運(yùn)算了。
賦值運(yùn)算符
這個(gè)運(yùn)算符,其實(shí)我們在前面的文章中一直都有用到。比如,變量賦值中:
int a = 3;

這行代碼中的 = ,就是賦值運(yùn)算符。

可能有人就要問了,不對吧,這個(gè)在數(shù)學(xué)中不是等于號(hào),表示相等的意思嗎?

沒錯(cuò),= 在數(shù)學(xué)中是表示相等的意思,但是在計(jì)算機(jī)語言當(dāng)中,=是表示賦值,而相等是有另外一種表示方式,下面將會(huì)在算術(shù)運(yùn)算符中解釋的。

那什么是賦值?

給大家說一個(gè)比喻:我有一個(gè)東西,我不想一直拿在手上,想要交給變量 a 這個(gè)人來幫我保管,當(dāng)我要用的時(shí)候,叫 a 過來就可以了。而我將東西交到 a 的手上,這個(gè)過程就叫作賦值。

當(dāng)我想讓 a 幫我保管另外一個(gè)東西,我只需要通過賦值符號(hào)將東西交給 a 就可以。

a = 5;

除此之外,賦值符號(hào)還有如下這些:

賦值運(yùn)算符
含義
案例
+=
將左邊變量的值加上右邊的值后,重新賦值給左邊的變量。
c+=a
c =  c + a
-=
將左邊變量的值減去右邊的值后,重新賦值給左邊的變量。c-=a
c = c - a
*=將左邊變量的值乘以右邊的值后,重新賦值給左邊的變量。c*=a
c = c * a
/=
將左邊變量的值除以右邊的值后,重新賦值給左邊的變量。c /= a
c = c / a
%=
將左邊變量的值除以右邊的值后,將余數(shù)重新賦值給左邊的變量。c %= a
c = c % a
<<=將左邊的變量的值的二進(jìn)制碼向左移動(dòng)n位后得到的值,重新賦值給左邊的變量。a <<= 2
a = a << 2
>>=將左邊的變量的值的二進(jìn)制碼向右移動(dòng)n位后得到的值,重新賦值給左邊的變量。a >>= 2
a = a >> 2
&=
按照位與運(yùn)算符將左邊變量的值和右邊的值計(jì)算后,重新賦值給左邊的變量。
a &= 2
a = a & 2
|=
按照位或運(yùn)算符將左邊變量的值和右邊的值計(jì)算后,重新賦值給左邊的變量。a |= 2
a = a | 2
^=
按照異或運(yùn)算符將左邊變量的值和右邊的值計(jì)算后,重新賦值給左邊的變量。a ^= 2
a = a ^ 2

里面的一些運(yùn)算符,咱們就來看下面的內(nèi)容。

算術(shù)運(yùn)算符

既然是數(shù)學(xué),肯定是少不了加減乘除這些運(yùn)算的。計(jì)算機(jī)語言中也有相應(yīng)的符號(hào)來表示加減乘除,而且和數(shù)學(xué)中的運(yùn)算符號(hào)還是很相似的。

先來看看,算術(shù)運(yùn)算符有哪些個(gè)(這里假設(shè)兩個(gè)整型int變量 a=3,b=4):

算術(shù)運(yùn)算符
含義
案例
+
用于兩數(shù)相加
a+b == 7
-
用于兩數(shù)相減
a-b == -1
*用于兩數(shù)相乘a * b == 12
/
用于兩數(shù)相除
a / b == 0
%
獲取兩數(shù)相除后的余數(shù)a % b == 3
++
累加,每次計(jì)算 +1
a++ == 4
--
累減,每次計(jì)算 -1
a-- == 2
上面表格中的案例,相信有些人會(huì)對除法和取余兩個(gè)表示疑惑。
先來解釋一下除法的案例。按道理來說,3 除以 4,結(jié)果應(yīng)該是 0.25,天王老子來了都不會(huì)變,作者你是不是小學(xué)數(shù)學(xué)沒學(xué)好?
首先得先肯定一下,真實(shí)答案確實(shí)是 0.25。但在前面的數(shù)據(jù)類型中有提到,兩個(gè)整型相除結(jié)果還是整型,即保留整數(shù)部分,剔除掉小數(shù)部分。而這里事先聲明了兩個(gè)變量都屬于整型 int 類型的變量,因此相除的結(jié)果自然就是 0.
第二個(gè)取余的,或許有人理解不了。我們來看一個(gè)式子:3 ÷ 4 = 0 ...... 3。這個(gè)式子相信大家都都有印象吧。這里的取余,即使兩數(shù)相除之后,整數(shù)部分已經(jīng)沒有位置可以再填充了,剩下多少就是余數(shù)。而余數(shù)一般都是 0-9 之間,絕對不會(huì)是兩位數(shù)的。
關(guān)系運(yùn)算符
在算術(shù)運(yùn)算符表格中的案例,我們已經(jīng)見到了一個(gè)關(guān)系運(yùn)算符。沒錯(cuò),就是 ==,它在計(jì)算機(jī)語言中表示的就是相等的意思。
來看一下關(guān)系運(yùn)算符有哪些:
關(guān)系運(yùn)算符
含義
==
相等
!=
不相等
>
大于
<小于
>=
大等于
<=小等于

關(guān)系運(yùn)算符在編程中的作用是什么?

通常會(huì)用在后面要說的判斷結(jié)構(gòu)里面。例如,現(xiàn)在都這么高科技了,假設(shè)進(jìn)入網(wǎng)吧需要把身份證放在某個(gè)機(jī)子上進(jìn)行辨別。

那么,這個(gè)就需要進(jìn)行判斷和比較,如果身份證的年齡小等于 18 歲,是不被允許進(jìn)入的,機(jī)子會(huì)發(fā)出警告紅燈。反之,大于18歲的,機(jī)子就呈現(xiàn)綠燈,你就可以進(jìn)去暢快地 hasaki 了!

邏輯運(yùn)算符

邏輯運(yùn)算符通常是也是用在判斷結(jié)構(gòu)中,比如你需要判定多個(gè)條件的時(shí)候,就需要用到這個(gè)邏輯運(yùn)算符。還是去網(wǎng)吧,你首先年齡得達(dá)到吧,其次你錢得帶夠吧,無論哪一個(gè)條件你不滿足,都會(huì)被趕出去的。

那么,C語言中支持哪一些邏輯運(yùn)算符呢?來看下面這個(gè)表格:

邏輯運(yùn)算符
含義
&&
與,即所有條件同時(shí)滿足才能執(zhí)行。
||或,即只要其中一個(gè)條件滿足就可以執(zhí)行。
!非,取反邏輯狀態(tài)。即原本條件滿足,加上這個(gè)符號(hào)就不滿足了。

關(guān)于邏輯運(yùn)算符,后面在判斷結(jié)構(gòu)中再詳細(xì)展開。

位運(yùn)算符

在計(jì)算機(jī)中,位是最小的存儲(chǔ)單位(bit)。8個(gè)bit組成了一個(gè)字節(jié)(Byte),每個(gè)位里面存放的不是 1 就是 0。因此,位運(yùn)算符主要是針對于二進(jìn)制的運(yùn)算。

位運(yùn)算符含義
&
位與,同時(shí)為 1 才為 1.
|位或,同時(shí)為 0 才為 0.
^異或,同為 1 或同為 0,都為 0.
~
取反,原本是 1,結(jié)果為 0;原本為 0,結(jié)果為 1.
<<左移,操作的值向左移動(dòng) 1 位。
>>
右移,操作的值向右移動(dòng) 1 位。

先來看一下,位與、位或、異或三個(gè)運(yùn)算符的使用:

p
qp&q
p|q
p^q
0
00
0
0
1
00
11
1
11
1
0
0
10
11

再來看一下,取反、左移、右移三個(gè)運(yùn)算符的使用。這里設(shè)定 a 的值為 60,對應(yīng)的二進(jìn)制碼為 0011 1100。

運(yùn)算符
十進(jìn)制
二進(jìn)制十進(jìn)制二進(jìn)制
~a
60
0011 1100
-61
1100 0011
a<<2
60
0011 1100
2401111 0000
a>>260
0011 1100
15
0000 1111

左移、右移運(yùn)算符后面的數(shù)值,二進(jìn)制碼向左或者向右移動(dòng)幾位。

雜項(xiàng)運(yùn)算符

除了以上這些常用的運(yùn)算符之外,C語言中還有一些特別重要的運(yùn)算符:

sizeof()

用來返回變量的內(nèi)存大小。

int a;
sizeof(a); // 4
char c;
sizeof(c); // 1

尋址運(yùn)算符

在前一篇指針文章中有提到這個(gè)運(yùn)算符,&。和位運(yùn)算符中的位與運(yùn)算符&長得一樣,但是作用是完全不同的。

尋址運(yùn)算符是加載變量前面,表示變量的內(nèi)存地址。

int a;
&a; // 00000001
解引用運(yùn)算符
這個(gè)運(yùn)算符在指針中也有提到,和算術(shù)運(yùn)算符中的乘法運(yùn)算符 * 長得一樣,同樣的,它們作用的意義也是不同的。
解應(yīng)用運(yùn)算符通常用在變量聲明的時(shí)候,表示該變量是一個(gè)指針。
int *p;

三元運(yùn)算符

這是一個(gè)條件表示,問號(hào)前面是一個(gè)判斷表達(dá)式,問號(hào)后面則是式子成立和不成立返回的內(nèi)容。成立將冒號(hào)前面的值賦給變量,不成立就將后面的值賦給變量。

int a = 3 > 4 ? 0 : 1;

最后

關(guān)于運(yùn)算符的知識(shí)就簡單的講到這里了,具體的使用到后面應(yīng)用過程中有用到,會(huì)再次展開說一下。下一篇文章,說一下判斷結(jié)構(gòu)。

最后,非常感謝大家的觀看。大家的支持,是我寫下去的動(dòng)力!


C

0 人點(diǎn)贊