操作符詳解【C語言】-創(chuàng)新互聯(lián)

這里寫目錄標題
    • 一.算數(shù)操作符
    • 二.移位操作符
      • 1.左移操作符<<
      • 2.右移操作符>>
    • 三.位操作符
    • 四.賦值操作符
    • 五.單目操作符
    • 六.用于判斷條件的操作符
    • 七.多目操作符
      • 1.
    • 🚀 八.下標引用,結(jié)構(gòu)體成員訪問
      • 1.下標引用操作符:arr[i],表示訪問arr數(shù)組中下標為i的元素。
      • 2.結(jié)構(gòu)體成員訪問
    • 🏰九.表達式求值
      • 1.整形提升
        • 1.1整形提升的意義
        • 1.2整型提升的方式
      • 2.算術(shù)轉(zhuǎn)換
    • 十.操作符的屬性
    • 📕總結(jié)

創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為臺江等服務(wù)建站,臺江等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為臺江企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。一.算數(shù)操作符

+ - * / % ,這幾個就叫做算數(shù)操作符

但在使用時要注意一下幾個點:
1.%操作符只能作用在兩個整數(shù)上,返回的是整除之后的余數(shù)。
在這里插入圖片描述2.除了%,其他操作符既可作用于整數(shù),也可作用于浮點數(shù)。

二.移位操作符 1.左移操作符<<

將操作數(shù)的二進制補碼向左移動一位,左邊拋棄,右邊補0
5左移一位

2.右移操作符>>

將操作數(shù)的二進制補碼向右移動一位
在這里又分兩種右移方式:
①邏輯移位:左邊補0,右邊拋棄
②算數(shù)移位:左邊補原符號位,右邊拋棄
🐻在C語言中右移操作都是算數(shù)右移,但可以將一個數(shù)強制類型轉(zhuǎn)換成無符號數(shù)來實現(xiàn)邏輯右移

★對于移位操作符,不要移動負數(shù)位,不然編譯器可能會報錯

int a =10;
a>>-1;//可能會報錯
三.位操作符

& //按位與
| //按位或
^ //按位異或
注:他們的操作數(shù)必須是整數(shù)。

這些操作符是對兩個操作數(shù)的補碼進行操作的。

四.賦值操作符

+=
-=
*=
/=
<<= >>=
&=
|=
^=

用法舉例:

int a =0;
a+=1;//等價于a=a+1
a>>=1;//等價于a右移一位
a*=3;//等價于a=a*3

這些賦值操作符簡化了我們的代碼,并提高了代碼的可讀性,十分好用。

五.單目操作符

顧名思義,單目操作符即為操作數(shù)只有一個的操作符
常用單目操作符有:

! 邏輯反操作
- 負值
+ 正值
& 取地址
sizeof 求操作數(shù)的類型長度(以字節(jié)為單位)
~ 對一個數(shù)的二進制按位取反
– 前置、后置–
++ 前置、后置++
* 間接訪問操作符(解引用操作符)
(類型) 強制類型轉(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是計算操作數(shù)的類型長度的,單位是字節(jié),但sizeof(數(shù)組名)又有一點特殊,具體的可以看看我寫的另一篇文章詳解C語言數(shù)組。

六.用于判斷條件的操作符

>
<
>=
<=
== 判斷是否相等
!= 判斷是否不相等
&& 邏輯與:兩個條件都為真則返回1,否則返回0
|| 邏輯或:至少有一個條件為真則返回1,否則返回0

&&:從左往右判斷,只要有一個0則整體返回0,后面的不看了
||:從左往右判斷,只要有一個返回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,為真,則這個||邏輯或就不會再繼續(xù)往下進行了,因為結(jié)果已經(jīng)確定了,這樣可以節(jié)省計算機的工作量。

七.多目操作符 1.

exp1?exp2:exp3

這個三目操作符先判斷exp1的結(jié)果是否為真,若為真則運行exp2代碼,若為假則運行exp3。

int a=3;
int b =2;
int max=a>b?a:b//把a,b中較大的值放入max中

2.逗號表達式

逗號表達式就是用逗號隔開的若干表達式,從左往右依次執(zhí)行,逗號表達式的結(jié)果為最后一個表達式的果。
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
🚀 八.下標引用,結(jié)構(gòu)體成員訪問 1.下標引用操作符:arr[i],表示訪問arr數(shù)組中下標為i的元素。

[ ]是操作符,arr和i是它的兩個操作數(shù),arr[i]等價于*(arr+i)

2.結(jié)構(gòu)體成員訪問

①結(jié)構(gòu)體名.成員名
②結(jié)構(gòu)體指針->成員名
在這里插入圖片描述

🏰九.表達式求值 1.整形提升

C的整型算術(shù)運算總是至少以缺省整型類型的精度來進行的。翻譯一下就是C語言中的算數(shù)運算總是至少以整型類型的精度來進行的,為了獲得這個精度,表達式中的字符和短整型類型操作數(shù)在使用之前會被轉(zhuǎn)換成普通整型,這種轉(zhuǎn)換就叫做整型提升。

1.1整形提升的意義

表達式的整型運算要在CPU的相應(yīng)運算器件內(nèi)執(zhí)行,CPU內(nèi)整型運算器(ALU)的操作數(shù)的字節(jié)長度
一般就是int的字節(jié)長度,同時也是CPU的通用寄存器的長度。
因此,即使兩個char類型的相加,在CPU執(zhí)行時實際上也要先轉(zhuǎn)換為CPU內(nèi)整型操作數(shù)的標準長
度。
通用CPU(general-purpose CPU)是難以直接實現(xiàn)兩個8比特字節(jié)直接相加運算(雖然機器指令
中可能有這種字節(jié)相加指令)。所以,表達式中各種長度可能小于int長度的整型值,都必須先轉(zhuǎn)
換為int或unsigned int,然后才能送入CPU去執(zhí)行運算。

1.2整型提升的方式

整型提升是按照變量的數(shù)據(jù)類型的符號位來提升的

用例子來說明:

char a = 6;
char b = a+1;

在這里插入圖片描述
這里a的符號位是0,所以整型提升時左邊補0。
🐒注意,只要參與了表達式運算,char 類型的a就會發(fā)生整型提升

char a =0;
printf("%u",sizeof(+a))//輸出的結(jié)果為4

在上述代碼中,+a是一個表達式,這里發(fā)生了整形提升,一個字節(jié)的char類型的a被提升為了4個字節(jié),所以這里打印的結(jié)果為4。

講到這里,還是再細說一下sizeof這個操作符

sizeof只是計算操作數(shù)的所占空間大小,單位是字節(jié),如果sizeof后面是一個賦值表達式,那么這個表達式也并不會真正去計算,它只會返回這個表達式返回的變量所占的空間大小。
舉個栗子:

int a =2;
int c = sizeof(a=a+1);//這里a并不會真的去加1
printf("%d %d",a,c);//打印的結(jié)果為2 4

在上述代碼中,sizeof只計算a的大小,不去管這個賦值表達式算出的結(jié)果,所以a的值仍為2。
而在sizeof(+a)這行代碼中,由于+a是一個表達式,所以a會整型提升,這個表達式的所占空間為4個字節(jié),所以sizeof(+a)得到的結(jié)果為4。

2.算術(shù)轉(zhuǎn)換

如果某個操作符的各個操作數(shù)屬于不同的類型,那么要先將一個操作數(shù)轉(zhuǎn)換為另一個操作數(shù)的類型,才能繼續(xù)進行操作。

longdouble
double
float
unsignedlongint longint
unsignedint
int

如果某個操作數(shù)在上面列表中的排名較低,那這個操作數(shù)要先轉(zhuǎn)換為另一個操作數(shù)的類型,之后才能進行運算。

十.操作符的屬性

1.操作符的優(yōu)先級
2.操作符的結(jié)合性
3.是否控制求值順序

📕總結(jié)
  • 1.在進行運算操作時(移位操作,賦值操作等),由于內(nèi)存中存儲的是變量的補碼,所以實際是在對補碼進行操作(整型提升也是對補碼提升)。
  • 2.無符號數(shù)無符號位,如果是要移位操作等,補0。

在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文名稱:操作符詳解【C語言】-創(chuàng)新互聯(lián)
路徑分享:http://www.muchs.cn/article4/hgsoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣用戶體驗、微信小程序網(wǎng)站設(shè)計公司、品牌網(wǎng)站設(shè)計、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司