C語言操作符基礎(chǔ)知識圖文詳解
前言
操作符在c語言中有著必不可缺的作用,它們能使一些算法變得簡單,接下來就由我來為大家詳細解說。
1.算術(shù)操作符
+ - * /
這4個運算符均可用于整型和浮點型的運算,但只有當兩位數(shù)中一位時浮點型時,才能得出浮點型的結(jié)果。如: 3/2=1, 3/2.0=1.5。
%
取余數(shù),經(jīng)常用于控制一個數(shù)的范圍。這個操作符的數(shù)必須為整數(shù),如: 3%2=1,4%3=1。
2.移位操作符
>> (右移操作符) <<(左移操作符)
首先講左移操作符,首先我們要知道電腦存儲一個數(shù)字是以二進制形式存儲的,而存儲又分為原碼,反碼,補碼,在電腦中存的是補碼,打印出來的是原碼。編譯器有32位和64位的,我這里以32位做測試。關(guān)于原反補碼我簡單說,正數(shù)的原反補碼都相同,原碼的第一位為符號位,正數(shù)位0,負數(shù)位1.如下:
而二進制可以轉(zhuǎn)化為16進制,就是我寫的0x開頭后面的數(shù)字,記住0x是16進制的標志,而后面的
可以分為8段每一段都是從右向左數(shù),2^0,2^1,2^2,2^3.如果那位數(shù)是幾就乘以它。
負數(shù)的反碼與原碼取反,0變1,1變0,但符號位不變。補碼就是反碼最后一位加1,滿2進1.如下:
左移操作符:<<
知道了這些后,左移操作符就很簡單了,就是左邊丟棄右邊補0,且操作的是補碼
對于正數(shù)3如下:3<<1
它的作用相當于乘以了2,當然是移1位。也可以移多位,比如3<<2,3<<3等等。
ps-左移操作符和右移操作符移位時不能移負數(shù)位。比如:3<<-2,這是不行的。
右移操作符:>>
右移操作符就相對于來說較難了。
右移操作符可以分為邏輯右移和算術(shù)右移,邏輯右移就是右邊丟棄,左邊補0(和左移操作符有點類似);而算術(shù)右移就是右邊丟棄,左邊補符號位。下面是-2算術(shù)右移后的結(jié)果
它的作用相當于/2。
3.位操作符
3.1 & 按位與
同上述的移位操作符一樣,位操作符也是操作一個數(shù)的補碼。
比如-1的補碼和-2的補碼:令a=(-1)&(-2)
當兩者都為1時才返回1,只要有一個時0就返回0。所有返回:
結(jié)果還是-2.
3.2 | 按位或
| 按位或操作符就是只要有一個是1,就返回1,全為0才返回0
比如-1和-2,按位或后結(jié)果還是-1
3.3 ^ 按位異或
^ 按位異或 是相同時返回0,不同時返回1.符號位也要變。
-1和-2,按位異或后結(jié)果為正1
3.4 ~ 按位取反
~ 按位取反 每個二進制位0變1 ,1變0。
結(jié)果為0.
4.賦值操作符 =
對一個變量進行賦值,比如int a;a=5;
5.邏輯操作符
5.1 ! 非
! 又是單目運算符,在邏輯運算中,優(yōu)先順序最高。非運算符的結(jié)果只能是1或者0.
在c語言中規(guī)定一切非0值等同于1.而非運算符就是使0變1,1變0.比如!1=0; !0=1。
5.2 && 與
&& 是并且的意思,當兩邊的操作數(shù)都為1時,返回結(jié)果位1,兩者只要一個為0,結(jié)果就為0.
比如令a=1&&2,a的結(jié)果時1,a=0&&2,結(jié)果為0.
5.3 || 或
|| 操作符,當兩個操作數(shù)只要有一個為1,返回結(jié)果就為1,全為0,返回結(jié)果為0.
6.條件運算符 ?
? 是c語言中唯一一個三目操作符,它連接三個運算量
一般形式為: 表達式1?表達式2:表達式3
當表達式1的結(jié)果為非0時,返回表達式2的值
當表達式1結(jié)果為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語言中,每個變量都有一個地址,該操作符用來獲取變量在內(nèi)存中的地址。一般形式為&變量名。
取地址符的運算對象只能是變量,他的運算結(jié)果是變量的存儲地址,一個變量會占據(jù)多個字節(jié),而每個字節(jié)都有地址,其中最小的地址代表變量地址。
7.5 sizeof
求字節(jié)長度比如求一個數(shù)組的字節(jié)大小會包含數(shù)組內(nèi)的所有元素。
比如說這個圖,數(shù)組arr是int類型的,而里面包含6個元素,所以他的字節(jié)長度為24,而arr[0]是一個int類型字節(jié)長度為4.看到第三個,你們想到了什么?沒錯,他能用來求一個數(shù)組內(nèi)有多少個元素,因為總字節(jié)長度除以一個元素字節(jié)長度,不就能得到數(shù)組中總共有多少個元素嘛!
7.6 (強制類型轉(zhuǎn)換)
可以將一個類型強制轉(zhuǎn)換為另一個類型,一般形式(類型)變量或常量。
7.7 ++ --自增自減
這里自增自減又分為兩種,前置++和后置++,如a++或++a,這兩者是不同的,前者為先使用a再對a進行加1,后者為先加1再使用。簡單舉個例子:
c和d前置和后置的結(jié)果時不同的,雖然對于c和d的結(jié)果不同,但對a和b的操作都是加了1。
自減就和自增一樣嘍。
7.8 * 解引用
“引用”這個詞,出現(xiàn)最多的場景就是:在文章或者注腳里,寫上“引用(或摘自)某某作者某篇文章”,意思很明了,就是出現(xiàn)在本文的不是作者自己的話,而是別個作者的話,于是“引用”的意思就是拿過來用。還可以把“解引用”理解為“解碼”。假設(shè)ptr里存放的是一個內(nèi)存地址,那么*ptr就是這個內(nèi)存地址里存放的數(shù)據(jù)。前面這個“*”的解引用操作,就可以理解為對這個ptr進行解碼,解碼得到的數(shù)據(jù)就是*ptr,也就是我們常說的“這個內(nèi)存地址里存放的數(shù)據(jù)”或者“這個指針指向的數(shù)據(jù)”。“指針”的理解模式太容易混淆,而“解碼”的理解模式更好記一點。
8. 逗號表達式
一般形式(表達式1,表達式2,表達式3,·······)
逗號表達式一般用來判斷,他的運算結(jié)果時最后一個表達式,但并非就是說前面的表達式就不需要看了,因為他的執(zhí)行順序是從左往右。
就比如這個,由于我用了一個逗號表達式,因此循環(huán)停下來的條件是j小于4,但j一直等于0,又沒有對其進行任何操作,所有它陷入了死循環(huán),就會一直打印hehe。而在正常情況下:
再比如:
9. 關(guān)系操作符 == >= <= != > < =
> < =這幾個操作符就不要多說了吧。
9.1 ==
測試是否等于,在判斷字符串是否有相等的時,必須要用==,而不能用=。
在if語句中必須用==,而不能用=,=在c語言中是賦值,不能將它理解為數(shù)學(xué)中的等于。
9.2 !=
!= 不等于,也通常用于if語句中,來判斷變量是否滿足條件。
9.3 >= <=
大于或等于,小于或等于,也一般用于判斷語句中。
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Qt連接數(shù)據(jù)庫并實現(xiàn)數(shù)據(jù)庫增刪改查的圖文教程
QT連接數(shù)據(jù)庫是應(yīng)用開發(fā)的常用基礎(chǔ)操作,經(jīng)過實驗我總結(jié)了一些例程,下面這篇文章主要給大家介紹了關(guān)于Qt連接數(shù)據(jù)庫并實現(xiàn)數(shù)據(jù)庫增刪改查的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-04-04c語言中十六進制轉(zhuǎn)二進制顯示的實現(xiàn)方法
本篇文章對c語言中十六進制轉(zhuǎn)二進制顯示的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05