C語言操作符基礎知識圖文詳解

前言

操作符在c語言中有著必不可缺的作用,它們能使一些算法變得簡單,接下來就由我來為大傢詳細解說。

1.算術操作符

+ – * /

這4個運算符均可用於整型和浮點型的運算,但隻有當兩位數中一位時浮點型時,才能得出浮點型的結果。如: 3/2=1, 3/2.0=1.5。

%

取餘數,經常用於控制一個數的范圍。這個操作符的數必須為整數,如: 3%2=1,4%3=1。

2.移位操作符

>> (右移操作符) <<(左移操作符)

首先講左移操作符,首先我們要知道電腦存儲一個數字是以二進制形式存儲的,而存儲又分為原碼,反碼,補碼,在電腦中存的是補碼,打印出來的是原碼。編譯器有32位和64位的,我這裡以32位做測試。關於原反補碼我簡單說,正數的原反補碼都相同,原碼的第一位為符號位,正數位0,負數位1.如下:

而二進制可以轉化為16進制,就是我寫的0x開頭後面的數字,記住0x是16進制的標志,而後面的

可以分為8段每一段都是從右向左數,2^0,2^1,2^2,2^3.如果那位數是幾就乘以它。

負數的反碼與原碼取反,0變1,1變0,但符號位不變。補碼就是反碼最後一位加1,滿2進1.如下:

左移操作符:<<

知道瞭這些後,左移操作符就很簡單瞭,就是左邊丟棄右邊補0,且操作的是補碼

對於正數3如下:3<<1

它的作用相當於乘以瞭2,當然是移1位。也可以移多位,比如3<<2,3<<3等等。

ps-左移操作符和右移操作符移位時不能移負數位。比如:3<<-2,這是不行的。

右移操作符:>>

右移操作符就相對於來說較難瞭。

右移操作符可以分為邏輯右移和算術右移,邏輯右移就是右邊丟棄,左邊補0(和左移操作符有點類似);而算術右移就是右邊丟棄,左邊補符號位。下面是-2算術右移後的結果

它的作用相當於/2。

3.位操作符

3.1 & 按位與

同上述的移位操作符一樣,位操作符也是操作一個數的補碼。

比如-1的補碼和-2的補碼:令a=(-1)&(-2)

當兩者都為1時才返回1,隻要有一個時0就返回0。所有返回:

結果還是-2.

3.2 | 按位或

| 按位或操作符就是隻要有一個是1,就返回1,全為0才返回0

比如-1和-2,按位或後結果還是-1

3.3 ^ 按位異或

^ 按位異或 是相同時返回0,不同時返回1.符號位也要變。

-1和-2,按位異或後結果為正1

3.4 ~ 按位取反

~ 按位取反 每個二進制位0變1 ,1變0。

結果為0.

4.賦值操作符 =

對一個變量進行賦值,比如int a;a=5;

5.邏輯操作符

5.1 ! 非

! 又是單目運算符,在邏輯運算中,優先順序最高。非運算符的結果隻能是1或者0.

在c語言中規定一切非0值等同於1.而非運算符就是使0變1,1變0.比如!1=0; !0=1。

5.2 && 與

&& 是並且的意思,當兩邊的操作數都為1時,返回結果位1,兩者隻要一個為0,結果就為0.

比如令a=1&&2,a的結果時1,a=0&&2,結果為0.

5.3 || 或

|| 操作符,當兩個操作數隻要有一個為1,返回結果就為1,全為0,返回結果為0.

6.條件運算符 ?

? 是c語言中唯一一個三目操作符,它連接三個運算量

一般形式為: 表達式1?表達式2:表達式3

當表達式1的結果為非0時,返回表達式2的值

當表達式1結果為0時,返回表達式3的值

如:

int a=2,b=3,c=4,d;
d=(a<b)?a:c;

7.單目操作符

7.1 !

詳見5.1

7.2 + 正值

7.3 – 負值

7.4 & 取地址

c語言中,每個變量都有一個地址,該操作符用來獲取變量在內存中的地址。一般形式為&變量名。

取地址符的運算對象隻能是變量,他的運算結果是變量的存儲地址,一個變量會占據多個字節,而每個字節都有地址,其中最小的地址代表變量地址。

7.5 sizeof

求字節長度比如求一個數組的字節大小會包含數組內的所有元素。

比如說這個圖,數組arr是int類型的,而裡面包含6個元素,所以他的字節長度為24,而arr[0]是一個int類型字節長度為4.看到第三個,你們想到瞭什麼?沒錯,他能用來求一個數組內有多少個元素,因為總字節長度除以一個元素字節長度,不就能得到數組中總共有多少個元素嘛!

7.6 (強制類型轉換)

可以將一個類型強制轉換為另一個類型,一般形式(類型)變量或常量。

7.7 ++ –自增自減

這裡自增自減又分為兩種,前置++和後置++,如a++或++a,這兩者是不同的,前者為先使用a再對a進行加1,後者為先加1再使用。簡單舉個例子:

c和d前置和後置的結果時不同的,雖然對於c和d的結果不同,但對a和b的操作都是加瞭1。

自減就和自增一樣嘍。

7.8 * 解引用

“引用”這個詞,出現最多的場景就是:在文章或者註腳裡,寫上“引用(或摘自)某某作者某篇文章”,意思很明瞭,就是出現在本文的不是作者自己的話,而是別個作者的話,於是“引用”的意思就是拿過來用。還可以把“解引用”理解為“解碼”。假設ptr裡存放的是一個內存地址,那麼*ptr就是這個內存地址裡存放的數據。前面這個“*”的解引用操作,就可以理解為對這個ptr進行解碼,解碼得到的數據就是*ptr,也就是我們常說的“這個內存地址裡存放的數據”或者“這個指針指向的數據”。“指針”的理解模式太容易混淆,而“解碼”的理解模式更好記一點。

8. 逗號表達式

一般形式(表達式1,表達式2,表達式3,·······)

逗號表達式一般用來判斷,他的運算結果時最後一個表達式,但並非就是說前面的表達式就不需要看瞭,因為他的執行順序是從左往右。

就比如這個,由於我用瞭一個逗號表達式,因此循環停下來的條件是j小於4,但j一直等於0,又沒有對其進行任何操作,所有它陷入瞭死循環,就會一直打印hehe。而在正常情況下:

再比如:

9. 關系操作符 == >= <= != > < =

> < =這幾個操作符就不要多說瞭吧。

9.1 ==

測試是否等於,在判斷字符串是否有相等的時,必須要用==,而不能用=。

在if語句中必須用==,而不能用=,=在c語言中是賦值,不能將它理解為數學中的等於。

9.2 !=

!= 不等於,也通常用於if語句中,來判斷變量是否滿足條件。

9.3 >= <=

大於或等於,小於或等於,也一般用於判斷語句中。

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: