+ - * / % ,這幾個(gè)就叫做算數(shù)操作符
但在使用時(shí)要注意一下幾個(gè)點(diǎn):
1.%操作符只能作用在兩個(gè)整數(shù)上,返回的是整除之后的余數(shù)。
2.除了%,其他操作符既可作用于整數(shù),也可作用于浮點(diǎn)數(shù)。
將操作數(shù)的二進(jìn)制補(bǔ)碼向左移動(dòng)一位,左邊拋棄,右邊補(bǔ)0
將操作數(shù)的二進(jìn)制補(bǔ)碼向右移動(dòng)一位
在這里又分兩種右移方式:
①邏輯移位:左邊補(bǔ)0,右邊拋棄
②算數(shù)移位:左邊補(bǔ)原符號(hào)位,右邊拋棄
🐻在C語(yǔ)言中右移操作都是算數(shù)右移,但可以將一個(gè)數(shù)強(qiáng)制類(lèi)型轉(zhuǎn)換成無(wú)符號(hào)數(shù)來(lái)實(shí)現(xiàn)邏輯右移
★對(duì)于移位操作符,不要移動(dòng)負(fù)數(shù)位,不然編譯器可能會(huì)報(bào)錯(cuò)
int a =10;
a>>-1;//可能會(huì)報(bào)錯(cuò)
三.位操作符& //按位與
| //按位或
^ //按位異或
注:他們的操作數(shù)必須是整數(shù)。
這些操作符是對(duì)兩個(gè)操作數(shù)的補(bǔ)碼進(jìn)行操作的。
四.賦值操作符+=
-=
*=
/=
<<= >>=
&=
|=
^=
用法舉例:
int a =0;
a+=1;//等價(jià)于a=a+1
a>>=1;//等價(jià)于a右移一位
a*=3;//等價(jià)于a=a*3
這些賦值操作符簡(jiǎn)化了我們的代碼,并提高了代碼的可讀性,十分好用。
五.單目操作符顧名思義,單目操作符即為操作數(shù)只有一個(gè)的操作符
常用單目操作符有:
! 邏輯反操作
- 負(fù)值
+ 正值
& 取地址
sizeof 求操作數(shù)的類(lèi)型長(zhǎng)度(以字節(jié)為單位)
~ 對(duì)一個(gè)數(shù)的二進(jìn)制按位取反
– 前置、后置–
++ 前置、后置++
* 間接訪問(wèn)操作符(解引用操作符)
(類(lèi)型) 強(qiáng)制類(lèi)型轉(zhuǎn)換
其中有意思的是前置++和后置++(和- -),前置++是先加再使用,后置則是先使用再加。
可以這么理解:
前置++返回的是加1之后的操作數(shù),后置++返回的則是加1之前的操作數(shù)
int a =5;
printf("%d",a++);//輸出的是a加1之前的值,即打印5
printf("%d",a);由于上一行代碼打印之后a加了1,所以這里打印a的值為6
printf("%d",++a);輸出的是a加1之后的值,即打印7
其中sizeof是計(jì)算操作數(shù)的類(lèi)型長(zhǎng)度的,單位是字節(jié),但sizeof(數(shù)組名)又有一點(diǎn)特殊,具體的可以看看我寫(xiě)的另一篇文章詳解C語(yǔ)言數(shù)組。
六.用于判斷條件的操作符>
<
>=
<=
== 判斷是否相等
!= 判斷是否不相等
&& 邏輯與:兩個(gè)條件都為真則返回1,否則返回0
|| 邏輯或:至少有一個(gè)條件為真則返回1,否則返回0
&&:從左往右判斷,只要有一個(gè)0則整體返回0,后面的不看了
||:從左往右判斷,只要有一個(gè)返回1則整體返回1,后面的不看了
int a=5;
int b =10;
int c= 15;
int i =0;
i = ++a||++b||c++;
printf("%d %d %d",a,b,c);//結(jié)果為6,10,15
打印的結(jié)果為6,10,15,原因是++a返回的值為6,為真,則這個(gè)||邏輯或就不會(huì)再繼續(xù)往下進(jìn)行了,因?yàn)榻Y(jié)果已經(jīng)確定了,這樣可以節(jié)省計(jì)算機(jī)的工作量。
七.多目操作符 1.exp1?exp2:exp3
這個(gè)三目操作符先判斷exp1的結(jié)果是否為真,若為真則運(yùn)行exp2代碼,若為假則運(yùn)行exp3。
int a=3;
int b =2;
int max=a>b?a:b//把a(bǔ),b中較大的值放入max中
2.逗號(hào)表達(dá)式
逗號(hào)表達(dá)式就是用逗號(hào)隔開(kāi)的若干表達(dá)式,從左往右依次執(zhí)行,逗號(hào)表達(dá)式的結(jié)果為最后一個(gè)表達(dá)式的果。
exp1,exp2,exp3……expN
int a =0;
int b =2;
int c = a+=2,b+=3,a>b;
printf("%d %d %d",a,b,c);//打印結(jié)果為2,5,0
🚀 八.下標(biāo)引用,結(jié)構(gòu)體成員訪問(wèn)
1.下標(biāo)引用操作符:arr[i],表示訪問(wèn)arr數(shù)組中下標(biāo)為i的元素。[ ]是操作符,arr和i是它的兩個(gè)操作數(shù),arr[i]等價(jià)于*(arr+i)
2.結(jié)構(gòu)體成員訪問(wèn)①結(jié)構(gòu)體名.成員名
②結(jié)構(gòu)體指針->成員名
C的整型算術(shù)運(yùn)算總是至少以缺省整型類(lèi)型的精度來(lái)進(jìn)行的。翻譯一下就是C語(yǔ)言中的算數(shù)運(yùn)算總是至少以整型類(lèi)型的精度來(lái)進(jìn)行的,為了獲得這個(gè)精度,表達(dá)式中的字符和短整型類(lèi)型操作數(shù)在使用之前會(huì)被轉(zhuǎn)換成普通整型,這種轉(zhuǎn)換就叫做整型提升。
1.1整形提升的意義1.2整型提升的方式表達(dá)式的整型運(yùn)算要在CPU的相應(yīng)運(yùn)算器件內(nèi)執(zhí)行,CPU內(nèi)整型運(yùn)算器(ALU)的操作數(shù)的字節(jié)長(zhǎng)度
一般就是int的字節(jié)長(zhǎng)度,同時(shí)也是CPU的通用寄存器的長(zhǎng)度。
因此,即使兩個(gè)char類(lèi)型的相加,在CPU執(zhí)行時(shí)實(shí)際上也要先轉(zhuǎn)換為CPU內(nèi)整型操作數(shù)的標(biāo)準(zhǔn)長(zhǎng)
度。
通用CPU(general-purpose CPU)是難以直接實(shí)現(xiàn)兩個(gè)8比特字節(jié)直接相加運(yùn)算(雖然機(jī)器指令
中可能有這種字節(jié)相加指令)。所以,表達(dá)式中各種長(zhǎng)度可能小于int長(zhǎng)度的整型值,都必須先轉(zhuǎn)
換為int或unsigned int,然后才能送入CPU去執(zhí)行運(yùn)算。
整型提升是按照變量的數(shù)據(jù)類(lèi)型的符號(hào)位來(lái)提升的
用例子來(lái)說(shuō)明:
char a = 6;
char b = a+1;
這里a的符號(hào)位是0,所以整型提升時(shí)左邊補(bǔ)0。
🐒注意,只要參與了表達(dá)式運(yùn)算,char 類(lèi)型的a就會(huì)發(fā)生整型提升
char a =0;
printf("%u",sizeof(+a))//輸出的結(jié)果為4
在上述代碼中,+a是一個(gè)表達(dá)式,這里發(fā)生了整形提升,一個(gè)字節(jié)的char類(lèi)型的a被提升為了4個(gè)字節(jié),所以這里打印的結(jié)果為4。
講到這里,還是再細(xì)說(shuō)一下sizeof這個(gè)操作符
sizeof只是計(jì)算操作數(shù)的所占空間大小,單位是字節(jié),如果sizeof后面是一個(gè)賦值表達(dá)式,那么這個(gè)表達(dá)式也并不會(huì)真正去計(jì)算,它只會(huì)返回這個(gè)表達(dá)式返回的變量所占的空間大小。
舉個(gè)栗子:
int a =2;
int c = sizeof(a=a+1);//這里a并不會(huì)真的去加1
printf("%d %d",a,c);//打印的結(jié)果為2 4
在上述代碼中,sizeof只計(jì)算a的大小,不去管這個(gè)賦值表達(dá)式算出的結(jié)果,所以a的值仍為2。
而在sizeof(+a)這行代碼中,由于+a是一個(gè)表達(dá)式,所以a會(huì)整型提升,這個(gè)表達(dá)式的所占空間為4個(gè)字節(jié),所以sizeof(+a)得到的結(jié)果為4。
如果某個(gè)操作符的各個(gè)操作數(shù)屬于不同的類(lèi)型,那么要先將一個(gè)操作數(shù)轉(zhuǎn)換為另一個(gè)操作數(shù)的類(lèi)型,才能繼續(xù)進(jìn)行操作。
longdouble
double
float
unsignedlongint longint
unsignedint
int
如果某個(gè)操作數(shù)在上面列表中的排名較低,那這個(gè)操作數(shù)要先轉(zhuǎn)換為另一個(gè)操作數(shù)的類(lèi)型,之后才能進(jìn)行運(yùn)算。
十.操作符的屬性📕總結(jié)1.操作符的優(yōu)先級(jí)
2.操作符的結(jié)合性
3.是否控制求值順序
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱(chēng):操作符詳解【C語(yǔ)言】-創(chuàng)新互聯(lián)
路徑分享:http://jinyejixie.com/article4/hgsoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣、用戶(hù)體驗(yàn)、微信小程序、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容