C語(yǔ)言操作符資料_第1頁(yè)
C語(yǔ)言操作符資料_第2頁(yè)
C語(yǔ)言操作符資料_第3頁(yè)
C語(yǔ)言操作符資料_第4頁(yè)
C語(yǔ)言操作符資料_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

操作符

(參考初學(xué)c語(yǔ)言學(xué)習(xí)筆記第23、32條)

一■分類(lèi)

算數(shù)操作符:%

移位操作符:<<,>>

位操作符:&,人"

賦值操作符:=,+二,.=二二,/二,&二,八="二,>>=,<<=,%=

單目操作符:!,?,+,&,sizeof,~類(lèi)型)

關(guān)系操作符:>,>=,<,<=,!=(用于測(cè)試"不相等"),==(用于測(cè)試"相等")

邏輯操作符:&&,||

條件操作符:expl?exp2:exp3

逗號(hào)表達(dá)式:,

下標(biāo)引用:[]

函數(shù)調(diào)用:()

結(jié)構(gòu)成員:.,

二.類(lèi)型詳解

(-)算數(shù)操作符:%

a)對(duì)于A%B(A,B必須為整數(shù)),可利用"%"(取模),獲取小于B的所有整

數(shù)(O~(B-1));

例1:可用A%10,獲取A的個(gè)位數(shù)(113%10=3);

%100,獲取十位和個(gè)位數(shù)(113%100=13);

b)對(duì)于A/B,使用7"時(shí),AB同時(shí)為整型,則商為整型;AB凡一方為浮點(diǎn)

型,則商為浮點(diǎn)型;

(二)移位操作符:<<,>>

a)含義:移動(dòng)的是二進(jìn)制位(在補(bǔ)碼上操作)

b)操作對(duì)象:整型

c)移動(dòng)的大?。赫麛?shù)位

d)補(bǔ)充知識(shí):二進(jìn)制相關(guān)概念(參考初識(shí)c語(yǔ)言學(xué)習(xí)第28,29條)

整數(shù)的二進(jìn)制表示有三種:原碼,反碼,補(bǔ)碼。其中,正整數(shù)三者相同,負(fù)整數(shù)需要

分別計(jì)算。(整數(shù)在內(nèi)存中存儲(chǔ)的是補(bǔ)碼)

例2:十進(jìn)制:7

二進(jìn)制:111

原碼:00000000000000000000000000000111

(共32位。因?yàn)?為整型,4個(gè)字節(jié),及32個(gè)比特位)

(第一個(gè)數(shù)字可表正負(fù),稱(chēng)為符號(hào)位,0為正,1為負(fù))

反碼:00000000000000000000000000000111

補(bǔ)碼:00000000000000000000000000000111

十進(jìn)制:-7

原碼:10000000000000000000000000000111

反碼:11111111111111111111111111111000

(原碼符號(hào)位不變,其他位置咬位取反)

補(bǔ)碼:11111111111111111111111111111001(反碼+1)

e)左移操作符的效果:原數(shù)*2。即:7—>14,-7—>-14

f)右移操作符:(也即:原數(shù)/2)

算數(shù)移位(右邊丟棄,左邊補(bǔ)原符號(hào)位)(VS編輯器采用算數(shù)移位)

邏輯移位(右邊丟棄,左邊補(bǔ)零)(通常不用)

g)左移操作符的理解:

對(duì)于正整數(shù):7,原碼、反碼、補(bǔ)碼三碼相同。

移動(dòng)的是補(bǔ)碼,即補(bǔ)碼所有數(shù)字左移一位,

并補(bǔ)0。此時(shí),二進(jìn)制的計(jì)算如右圖所示??梢?/p>

理解為:首非零位所帶來(lái)的增值,能做到:彌補(bǔ)

尾值消失所帶來(lái)的減小,且剩余量恰好等于原值。

也即:原數(shù)*2。

對(duì)于負(fù)整數(shù):-7,三碼表示如例2所示。補(bǔ)碼左移一位,且補(bǔ)零后,-1得反

碼,反碼再轉(zhuǎn)換為原碼。轉(zhuǎn)化結(jié)束后,且結(jié)果(除符號(hào)位外的其余位與正數(shù)

7相同)與正數(shù)相似。

h)在C語(yǔ)言中的基本使用:(移位運(yùn)算時(shí)最有效的計(jì)算乘除法的運(yùn)算之一)

廚MicrosoftVisi

BintmainO

-7-14

inta=-7;D:\VS2022所居

intb=a?1;按任意鍵關(guān)閉

printf(%d%d,a,b);

■!return0;

(三)位操作符:&,人/(雙目操作符)

a)含義:①&(按位與)/(按位或),八(按位異或)

②三者操作的皆是二進(jìn)制位

③三者所得皆為補(bǔ)碼

b)區(qū)別:①&:比較補(bǔ)碼,每位數(shù)字,含零則零,全一則一

②|:比較補(bǔ)碼,每位數(shù)字,含一則一,全零則零

③八:比較補(bǔ)碼,每位數(shù)字,相同為零,相異為一

c)計(jì)算規(guī)則:

A

:①滿(mǎn)足交換律,②相同數(shù)異或得0:aAa=0,③任何數(shù)與0異或得自

身:aA0=a

d)使用示例:

例3(人):在不創(chuàng)建臨時(shí)變量的情況下,通過(guò)"八"交換兩變量的值,如圖:(在

實(shí)際編寫(xiě)代碼時(shí),此方法偏向于雞肋)

①“a二a八b”的作用在于,輔助后兩語(yǔ)句完成功能的實(shí)現(xiàn);(并非在實(shí)際上計(jì)算

出“a八b”的值,僅是在邏輯上應(yīng)用到“八”的特性)

②ub=aAbn實(shí)際上此時(shí)為:"b=aAbAb",此時(shí),ubAb"=0,即:b二a八。,

也即b=a=5;

③ua=bAa"實(shí)際上此時(shí)為:a=aAaAb",也即a=b二2;

HintmainO

〃在不創(chuàng)建臨時(shí)變量的情況下,通過(guò)“一”交換兩變量的值

inta=5;

intb=2;

printf("操作前:a=%db=%d\n”,a,b);

a=ab;

b=ab;

a=ba;

-printf("操作后:a=%db=%d”[a,b)J_______________________

1

1return0;

11

例4(&):輸出一個(gè)整數(shù)在計(jì)算機(jī)中存儲(chǔ)時(shí)含有多少個(gè)1,如圖:

(也即:求一個(gè)整數(shù)存儲(chǔ)在內(nèi)存中的二進(jìn)制中1的個(gè)數(shù))

//輸出?個(gè)數(shù)在計(jì)算機(jī)中存儲(chǔ)時(shí)含有多少個(gè)1

〃(求一個(gè)整數(shù)存儲(chǔ)在內(nèi)存中的二斑制中1的個(gè)數(shù))

My_Count(intnum)

intcount=0;〃用于計(jì)數(shù)

while(num)//當(dāng)num=0時(shí),不立入循環(huán)。

if(num&1)〃判斷.“num&1".是否為真

;//num&1,可理解為,num在計(jì)算器中以二進(jìn)制存儲(chǔ),使其進(jìn)行?“按位與1”計(jì)算

//4:比較兩變量的補(bǔ)碼,含零則零,全一則一

〃1在二進(jìn)制中為:0(共31個(gè)零)1,其與num比較時(shí),很容易知道,當(dāng)且僅當(dāng)num的補(bǔ)碼最后一位為1時(shí)

//“num&1”的結(jié)果才為1?否則為零

〃籍此作為選擇語(yǔ)句的判斷條件,故當(dāng)進(jìn)入選擇語(yǔ)句時(shí)可知,num此次循環(huán)的最后?位為1

count++;〃計(jì)數(shù)+1

num=num?l;〃num右移1位,用來(lái)實(shí)現(xiàn);每次循環(huán)可以統(tǒng)計(jì)二進(jìn)制中的?位數(shù)字是否為1

〃此語(yǔ)句不得放入選擇語(yǔ)句中,理由:若num=10?此時(shí)二進(jìn)制位表現(xiàn)為:0(共28個(gè)零)1010

〃則num&1=0,此時(shí)不進(jìn)入選擇語(yǔ)句,若此語(yǔ)句在if內(nèi),則num—宜不被改變,循環(huán)無(wú)解

returncount:

main()

intnum=0;

printf("詁輸入任意整數(shù):”):

scanf(*%(!*,&num);

intret=My_Count(num):

printf("底漱在計(jì)算機(jī)存儲(chǔ)內(nèi)含有:刎個(gè)1",ret);

return0;

e)理解:

①"按位"可理解為:操作對(duì)象的補(bǔ)碼,其位序滿(mǎn)足對(duì)應(yīng)關(guān)系

②"與二"或"可理解為:是對(duì)數(shù)字1的描述。即“a&b"表:a和b的補(bǔ)

碼,對(duì)應(yīng)位都是1,則結(jié)果的對(duì)應(yīng)位為1;匕|b”表:對(duì)應(yīng)位有一個(gè)是

1,則為1

③"異或"可理解為:"按位異或"操作通常用于滿(mǎn)足"使特定為翻轉(zhuǎn)"(參

考例5)和“兩值交換"(參考例3)

(四)單目操作符:!,-,+,&,sizeof,~類(lèi)型)

a)含義:①!:邏輯反操作;即:反轉(zhuǎn)真假,a為真(非零),!a為假(零)

②?:負(fù)值

③+:正值

④&:取地址

⑤sizeof:計(jì)算操作數(shù)的類(lèi)型長(zhǎng)度(單位:字節(jié)),即:某類(lèi)型所創(chuàng)

建的變量占據(jù)空間的大小

⑥~:對(duì)一個(gè)數(shù)的二進(jìn)制按位取反

⑦一:-1,有前置(先減再用\后置之分

⑧++:+1,有前置、后置(先用再加)之分

⑨*:間接訪問(wèn)操作符(解引用操作符)

⑩(類(lèi)型):強(qiáng)制類(lèi)型轉(zhuǎn)換

b)的作用:

①對(duì)于操作數(shù)的二進(jìn)制位,即其反碼,進(jìn)行按位取反;

②在數(shù)學(xué)上,等效于:取原數(shù)的相反數(shù)并-1;

③通過(guò)和"&"、T,也可達(dá)到修改特定位的目的:

例5:修改特定位的幾種操作方法

一mainO

t

n

-inta=13;〃僅修改a的第〃位數(shù)。a的二進(jìn)制反碼為:01共27個(gè))01101,

:〃反碼為32位,為方便采用8位顯示,即:00001101

〃。變1

a1=(1?4);〃知:2的其他位不變,匚修改為1;“I”(按位或)“含1則1”;

;〃故當(dāng)a按位或第五位為1.其他位為0的數(shù).即可達(dá)到目的

〃也舁:a|=00010000

〃利用1的反碼為:00000001的特性,將第一位1左移至第五位,也即左移4位

printf(*%d\n*,a);

〃1變0

a&=C(1?4));〃此時(shí):a的反碼為:00011101

:〃“&”(按位與)“全1則1”;

〃當(dāng)a按位與第一到四號(hào)位為1.第五位為0.其他位為1的數(shù),即達(dá)到目的

〃也即:a&=11101111

//)311101111可由00010000按位取反得,00010000可由1左移四位得

printf(*%d\n*,a);

〃利用,完成上述操作

intb=13;

b"=(1?4);//“一”(按位異或)“相異為1”:

printfC%d\n*,b);丸原數(shù)按位異或特定位與原數(shù)不同且其他位為0的數(shù),即可

b"=(1?4);

printf(*%d\n*,b);

return0;

)

c)的注意事項(xiàng)

①通常情況下,嚴(yán)格按照:"前置先變?cè)儆茫笾孟扔迷僮?理解即可

②無(wú)論前置后置,操作數(shù)本身都發(fā)生了變化,變化幅度為1

③在內(nèi)置循環(huán)類(lèi)型中,"i++"與"++『沒(méi)有區(qū)別,見(jiàn)下圖

(兩個(gè)循環(huán),i、j均由0開(kāi)始,到10結(jié)束,共經(jīng)歷10次循環(huán))

ElintmainO

inti=0;

intj=0;

intcount1=0;

intcount2=0;

國(guó)MicrosoftVisualSt

for(i=0;i<10;i++)

1010

count1++;

)1010

日f(shuō)or(j=0;j<10;++j)

D:\VS2022所寫(xiě)代

count2++;按任意鍵關(guān)閉此趨

)

printf(*%d%d\n*?count1,i);

printf(*%d%d\n*?count2,j);

return0;

}

d)&&與||的注意事項(xiàng)

①在多重"邏輯與"的情況下:從左往右,遇0(假)即止,其后的語(yǔ)項(xiàng)將

不再執(zhí)行。如圖:

Sintmain()

國(guó)MicrosoftVisua

(

1

inti=0,a=0,b=2,c=3;a一

一2

i=a++&&++b&&c++;b=

printf(*a=%d\nb=%d\nc=%d\ni=%d*?a,b,c,i);c3

return0:i0

②在多重"邏輯或"的情況下:從左往右,遇1(真)即止,其后的語(yǔ)項(xiàng)將

不再執(zhí)行。如圖:

Elintmain()國(guó)MicrosoftVi

I(

inti=0,a=0,b=2,c=3;a1

i=a++||++b||C++;b3

printf("a=%d\nb=%d\nc=%d\ni=%d”,a,b,c,i);C3

return0;

1.1

e)下標(biāo)引用操作符:"[]"

①arr[7]成立,意為:訪問(wèn)數(shù)組arr的下標(biāo)為7的元素,也即第八個(gè)元素

②7[arr]成立,與寫(xiě)法①表同種意義(但不常用,且僅在實(shí)現(xiàn)訪問(wèn)功能時(shí)可

行,在定義時(shí)不行)

f)結(jié)構(gòu)體成員:"和

①"."的使用:”結(jié)構(gòu)體對(duì)象.成員名"

②"?>"的使用:”結(jié)構(gòu)體指針變量。成員名"

③例6:兩者在結(jié)構(gòu)體中的使用及其異同點(diǎn)

期北場(chǎng)[知;鬻幻鍍微滑自守燧建設(shè)葡冬彳堵在的如通

A東例:

他建弘峋血料祭例$虬

加ct加.>7

I>.ir\丫內(nèi)仍叁辦總鉆狗林飴灰堂.

char加版[頊n而發(fā))r海*)秤中油比同

int.

dar冽口

cbrieloLgj''.

]0../.―-4.@-

何&p%/d:(s譏視:S如*ps),

1尸金,

?pG甘「%曲U%5%豬\「,(妙及將岫爭(zhēng)),解「附

.;宓6?,七pO.?te化)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論