掌握位運(yùn)算的類型及其操作_第1頁(yè)
掌握位運(yùn)算的類型及其操作_第2頁(yè)
掌握位運(yùn)算的類型及其操作_第3頁(yè)
掌握位運(yùn)算的類型及其操作_第4頁(yè)
掌握位運(yùn)算的類型及其操作_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

掌握位運(yùn)算的類型及其操作第一頁(yè),共十五頁(yè),編輯于2023年,星期三10.1位運(yùn)算符和位運(yùn)算C語(yǔ)言提供的位運(yùn)算操作符,具有直接操作二進(jìn)制位的能力,位運(yùn)算是指二進(jìn)制位的運(yùn)算,操作數(shù)以二進(jìn)制補(bǔ)碼形式按位參與運(yùn)算。運(yùn)算符中除了取反運(yùn)算~外,其余都是二元運(yùn)算符,且操作數(shù)只能是整型或字符型數(shù)據(jù),不能是實(shí)型數(shù)據(jù)第二頁(yè),共十五頁(yè),編輯于2023年,星期三10.1.1與運(yùn)算

&按位與運(yùn)算符"&"的功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)制位相與。只有對(duì)應(yīng)的兩個(gè)二進(jìn)制位都為1時(shí),結(jié)果位才為1,否則為0。例如:10&6可寫算式如下:

00001010(10的二進(jìn)制補(bǔ)碼)&00000110(6的二進(jìn)制補(bǔ)碼)00000010(2的二進(jìn)制補(bǔ)碼)按位與運(yùn)算通常用來(lái)對(duì)某些位清0第三頁(yè),共十五頁(yè),編輯于2023年,星期三10.1.2或運(yùn)算

|按位或運(yùn)算符“|”的功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)制位相或。只要對(duì)應(yīng)的二進(jìn)制位中有一個(gè)為1,結(jié)果位就為1。例如:10|6可寫算式如下:

00001010|0000011000001110(十進(jìn)制為14)按位或運(yùn)算通常用來(lái)對(duì)某些位置1第四頁(yè),共十五頁(yè),編輯于2023年,星期三10.1.3異或運(yùn)算

^按位異或運(yùn)算符“^”功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)制位相異或,當(dāng)對(duì)應(yīng)的二進(jìn)制位相異時(shí),結(jié)果為1。例如:10^6可寫成算式如下:

00001010^0000011000001100(十進(jìn)制為12)第五頁(yè),共十五頁(yè),編輯于2023年,星期三10.1.4求反運(yùn)算~求反運(yùn)算符~為單目運(yùn)算符,具有右結(jié)合性。其功能是對(duì)參與運(yùn)算的數(shù)的各二進(jìn)制位按位求反。例如:~10的運(yùn)算為:~(00001010)

結(jié)果為:11110101應(yīng)當(dāng)注意的是~的優(yōu)先級(jí)較高,對(duì)~a&b,是先進(jìn)行~a運(yùn)算,再進(jìn)行&運(yùn)算。第六頁(yè),共十五頁(yè),編輯于2023年,星期三10.1.5左移運(yùn)算<<左移運(yùn)算符“<<”功能把“<<”左邊的運(yùn)算數(shù)的二進(jìn)制位全部左移若干位,由“<<”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。例如:a<<4指把a(bǔ)的各二進(jìn)制位向左移動(dòng)4位,若a=00000011(十進(jìn)制3),左移4位后為00110000(十進(jìn)制48)。當(dāng)不發(fā)生溢出時(shí),一個(gè)數(shù)據(jù)每左移1位相當(dāng)于乘以2,左移2位相當(dāng)于乘以4第七頁(yè),共十五頁(yè),編輯于2023年,星期三10.1.6右移運(yùn)算>>右移運(yùn)算符“>>”功能是把“>>”左邊的運(yùn)算數(shù)的各二進(jìn)制位全部右移若干位,“>>”右邊的數(shù)指定移動(dòng)的位數(shù)。對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)0;當(dāng)為負(fù)數(shù)時(shí),符號(hào)位為1,最高位是補(bǔ)0還是補(bǔ)1取決于編譯系統(tǒng)的規(guī)定,TurboC和很多系統(tǒng)規(guī)定補(bǔ)1。例如:a=10,b=-10;a>>210的補(bǔ)碼為00001010右移2位后為00000010b>>2(-10的補(bǔ)碼為11110110右移2位后為11111101當(dāng)不發(fā)生溢出時(shí),一個(gè)數(shù)據(jù)每右移1位相當(dāng)于除以2,右移2位相當(dāng)于除以4第八頁(yè),共十五頁(yè),編輯于2023年,星期三說(shuō)明:(1)復(fù)合賦值運(yùn)算符:除按位取反運(yùn)算外,其余5個(gè)位運(yùn)算符均可與賦值運(yùn)算符一起構(gòu)成復(fù)合賦值運(yùn)算符,例如&=、|=、^=、<<=、>>=。如a&=b相當(dāng)于a=a&b。(2)不同長(zhǎng)度數(shù)據(jù)間的位運(yùn)算:當(dāng)不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算時(shí)(如a&b,a為long型,b為int型),系統(tǒng)會(huì)將二者按右端對(duì)齊,如果b為正數(shù),則左側(cè)16位補(bǔ)0;如果b為負(fù)數(shù),左側(cè)16位補(bǔ)1;如果b為無(wú)符號(hào)整數(shù),則左側(cè)補(bǔ)0。(3)位運(yùn)算符“&、|、~”不同于邏輯運(yùn)算符“&&、||、!”,位運(yùn)算按二進(jìn)制位相與,結(jié)果為數(shù)值;邏輯運(yùn)算符操作數(shù)整體運(yùn)算,結(jié)果為邏輯值真或假;第九頁(yè),共十五頁(yè),編輯于2023年,星期三10.2位域“位域”是把一個(gè)字節(jié)中的二進(jìn)制位劃分為幾個(gè)不同的區(qū)域,并說(shuō)明每個(gè)區(qū)域的位數(shù)。每個(gè)域有一個(gè)域名,允許在程序中按域名進(jìn)行操作,這樣就可以把幾個(gè)不同的對(duì)象用一個(gè)字節(jié)的二進(jìn)制位來(lái)表示。利用位域能夠用較少的位數(shù)存儲(chǔ)數(shù)據(jù)。

第十頁(yè),共十五頁(yè),編輯于2023年,星期三位域是一種結(jié)構(gòu)體,允許以位為單位來(lái)指定成員所占用的內(nèi)存長(zhǎng)度,其定義和結(jié)構(gòu)體定義相仿,形式為:

struct位域結(jié)構(gòu)名

{

位域列表;};10.2.1位域結(jié)構(gòu)體及變量的定義其中位域表示為:類型說(shuō)明符位域名:長(zhǎng)度,位域的類型只能是unsigned或int類型,長(zhǎng)度不能超過(guò)一個(gè)存儲(chǔ)單元的長(zhǎng)度注:無(wú)域名的位域不可用;不指明長(zhǎng)度則表示長(zhǎng)度為一個(gè)存儲(chǔ)單元;長(zhǎng)度為0的域稱為空域,表示下面的位域從下一單元開始存放。一、位域結(jié)構(gòu)體的定義第十一頁(yè),共十五頁(yè),編輯于2023年,星期三二、位域變量的定義及說(shuō)明位域變量的說(shuō)明與結(jié)構(gòu)體變量說(shuō)明的方式相同。可采用先定義后說(shuō)明,同時(shí)定義說(shuō)明或者直接說(shuō)明三種方式。例如:

structdata { inta:8; intb:2; intc:6; inti; }x;說(shuō)明x為data類型的變量,共占四個(gè)字節(jié)。其中位域a占8位,位域b占2位,位域c占6位,位域i占兩個(gè)字節(jié)。abci82616第十二頁(yè),共十五頁(yè),編輯于2023年,星期三一個(gè)位域必須存儲(chǔ)在同一個(gè)存儲(chǔ)單元中,不能跨兩個(gè)存儲(chǔ)單元。如果一個(gè)存儲(chǔ)單元所??臻g不夠存放一個(gè)位域時(shí),系統(tǒng)自動(dòng)從下一單元存放該位域。也可以使用空域使某位域從下一單元開始存放。例如:structdata{ unsigneda:4; unsigned:0; unsignedb:5; unsignedc:4; inti;}x;第十三頁(yè),共十五頁(yè),編輯于2023年,星期三10.2.2、位域的引用位域的引用和結(jié)構(gòu)成員的引用相同,用位域變量和成員訪問(wèn)運(yùn)算符來(lái)引用位域成員,其一般形式為:位域變量名.位域如:x.a=10;x.b=2也可以用指針變量指向一個(gè)成員為位域的結(jié)構(gòu)體變量,然后通過(guò)該指針變量來(lái)引用位域。如:structdatax,*p;p=&x;/*使p指向x*/p->a=10;p->c=2;位域的輸出允許用%d、%x、%u和%o等格式。注:賦值時(shí)要注意位域的最大范圍在數(shù)值表達(dá)式中引用位域時(shí),系統(tǒng)自動(dòng)將位域轉(zhuǎn)換為整型數(shù)據(jù)第十四頁(yè),共十五頁(yè),編輯于2023年,星期三例:定義位域結(jié)構(gòu)體,并輸出位域值。

#include”stdio.h”voidmain(){ structdata/*定義位域結(jié)構(gòu)體data*/ {unsigneda:1; unsignedb:3; unsignedc:4; }bit,*pbit;/*說(shuō)明位域變量bit和指針變量pbit*/ bit.a=1; bit.b=7; bit.c=15; printf("

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論