




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第11章位運(yùn)算11.1位運(yùn)算基礎(chǔ)11.2位運(yùn)算符11.3位域11.4應(yīng)用實(shí)例11.1位運(yùn)算基礎(chǔ)11.1.1字節(jié)和位11.1.2原碼、反碼、補(bǔ)碼11.1.1字節(jié)和位大多數(shù)計算機(jī)的內(nèi)存儲器是由許多被稱為“字節(jié)”(byte)的單元組成。每一個字節(jié)有一個地址。若干個字節(jié)組成一個存儲單元,稱為“字”(word)。一個字節(jié)一般由8個二進(jìn)位組成,每個二進(jìn)位的值是0或1。11.1.2原碼、反碼、補(bǔ)碼1.原碼只將最高位做符號位(以0代表正,以1代表負(fù)),其余各位代表數(shù)值本身的絕對值。2.反碼一個數(shù)如果為正,則它的反碼與原碼相同;一個數(shù)如果為負(fù),則符號位為1,其余各位是對原碼取反。3.補(bǔ)碼補(bǔ)碼的規(guī)定如下:
正數(shù):其原碼、反碼、補(bǔ)碼相同。負(fù)數(shù):最高位為1,其余各位為原碼的相應(yīng)位取反,然后對整個數(shù)加1。11.2位運(yùn)算符11.2.1按位與運(yùn)算符按位與運(yùn)算符“&”是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對應(yīng)的二進(jìn)位相與。11.2.2按位或運(yùn)算符按位或運(yùn)算符“|”是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對應(yīng)的二進(jìn)位相或。11.2位運(yùn)算符11.2.3按位異或(XOR)運(yùn)算符
按位異或運(yùn)算符“^”是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對應(yīng)的二進(jìn)位相異或,11.2.4取反運(yùn)算符
為單目運(yùn)算符,具有右結(jié)合性。其功能是對參與運(yùn)算的數(shù)的各二進(jìn)位按位取反。11.2位運(yùn)算符11.2.5左移運(yùn)算符<<
左移運(yùn)算符“<<”是雙目運(yùn)算符。其功能把“<<”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“<<”右邊的數(shù)指定移動的位數(shù),高位丟棄,低位補(bǔ)0。11.2.6右移運(yùn)算符>>
右移運(yùn)算符“>>”是雙目運(yùn)算符。其功能是把“>>”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動的位數(shù)。11.3位域所謂“位域”是把一個字節(jié)中的二進(jìn)位劃分為幾個不同的區(qū)域,并說明每個區(qū)域的位數(shù)。每個域有一個域名,允許在程序中按域名進(jìn)行操作。1.位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相仿,其形式為:
struct位域結(jié)構(gòu)名{位域列表}其中位域列表的形式為: 類型說明符
位域名:位域長度位域變量的說明與結(jié)構(gòu)變量說明的方式相同。11.3位域?qū)τ谖挥虻亩x尚有以下幾點(diǎn)說明:(1)一個位域必須存儲在同一個字節(jié)中,不能跨兩個字節(jié)。(2)由于位域不允許跨兩個字節(jié),因此位域的長度不能大于一個字節(jié)的長度。(3)位域可無位域名,這時它只用來作填充或調(diào)整位置。無名的位域是不能使用的。11.3位域2.位域的使用位域的使用和結(jié)構(gòu)成員的使用相同,其一般形式為:
位域變量名.位域名位域允許用各種格式輸出。11.3位域【例11-5】main(){structbs /*定義位域結(jié)構(gòu)bs*/{unsigneda:1;unsignedb:3;unsignedc:4;}bit,*pbit; /*說明bs類型的變量bit和指 向bs類型的指針變量pbit*/bit.a=1; /*分別給三個位域賦值*/11.3位域
bit.b=7;bit.c=15;printf("%d,%d,%d\n",bit.a,bit.b,bit.c);pbit=&bit; /*位域變量bit的地址送 給指針變量pbit*/pbit->a=0;/*用指針方式給位域a重新賦值*/
pbit->b&=3; /*復(fù)合的位運(yùn)算符&=*/
pbit->c|=1;
/*使用復(fù)合位運(yùn)算符|=*/
printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);}11.3位域【例11-5】程序運(yùn)行結(jié)果如下圖所示。11.4應(yīng)用實(shí)例【例11-6】取一個整數(shù)a從開始的4~7位。編程思想:(1)先使a右移4位,使要取的4~7位移到最右端。(2)設(shè)置一個低四位全為1,其余全為0的數(shù)??梢赃@樣取得~(~0<<4)。(3)將上面兩者進(jìn)行&運(yùn)算。11.4應(yīng)用實(shí)例源程序:#include<stdio.h>main(){unsigneda,b,c,d;scanf("%o",&a);b=a>>4; /*使a右移4位*/
c=~(~0<<4); /*設(shè)置一個低四位全為1, 其余全為0的數(shù)*/
d=b&c; /*進(jìn)行位與運(yùn)算*/
printf("%o\n%o\n",a,d);}11.4應(yīng)用實(shí)例【例11-6】程序運(yùn)行結(jié)果如下圖所示。11.4應(yīng)用實(shí)例【例11-7】循環(huán)移位。要求將a進(jìn)行右循環(huán)移位,即將a中原來左面的(16-n)位右移n位,原來右端n位移到最左邊n位,假設(shè)用兩個字節(jié)存放一個整數(shù)。編程思想:(1)將a的右端n位先放到b中的高n位中,可以用下面的語句實(shí)現(xiàn):b=a<<(16-n)(2)將a右移n位,其左面高n位補(bǔ)0,可以用下面的語句實(shí)現(xiàn):c=a>>n11.4應(yīng)用實(shí)例(3)將c與b進(jìn)行按位或運(yùn)算,即:c=c|b,如下圖所示。
11.4應(yīng)用實(shí)例源程序:#include<stdio.h>main(){unsigneda,b,c;intn;scanf("a=%o,n=%d",&a,&n);b=a<<(16-n); /*將a的右端n位先放到 b中的高n位中*/
c=a>>n; /*將a右移n位,其左面 高n位補(bǔ)0*/
c=c|b; /*進(jìn)行按位或運(yùn)算*/
printf("%o\n%o",a,c);}11.4應(yīng)用實(shí)例【例11-7】程序運(yùn)行結(jié)果如下圖所示。11.4應(yīng)用實(shí)例【例11-8】使用位運(yùn)算來測試所使用的機(jī)器的機(jī)器字長度。編程思想:因?yàn)檎停╥nt或unsigned)的長度與機(jī)器字長度相同,所以測試所用的機(jī)器的機(jī)器字長即確定一個整型變量的存儲單元的位數(shù)。實(shí)現(xiàn)方法上可以先將一個整型變量置為全1,然后通過移位來統(tǒng)計最初的1的個數(shù)。移位時,無論左移或是右移都必須保證填充位為0;否則,程序?qū)⑺姥h(huán),永遠(yuǎn)不可能得到正確的結(jié)果。11.4應(yīng)用實(shí)例源程序:#include"stdafx.h"main(){ unsignedk=~0; /*置變量k為全1*/
intbits=0; /*聲明變量bits,用于 記錄變量k的存處位數(shù)*/
while(k!
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 皮影文化課題申報書
- 智能農(nóng)場研究課題申報書
- 課題項目申報書研究內(nèi)容
- 教師課題申報書講座視頻
- 課題立項申報書如何上傳
- 怎么寫科研課題申報書
- 教育學(xué) 課題申報書
- 怎樣查課題申報書
- 課題申報評審書注意事項
- 課題申報書選題
- (正式版)JBT 14660-2024 額定電壓6kV到30kV地下掘進(jìn)設(shè)備用橡皮絕緣軟電纜
- 本科院校-基礎(chǔ)醫(yī)學(xué)-醫(yī)學(xué)細(xì)胞生物學(xué)-第二章 細(xì)胞的概念與分子基礎(chǔ)
- iso37001-2016反賄賂管理手冊程序文件表單一整套
- 新蘇教版科學(xué)六年級下冊全冊教案(含反思)
- 火災(zāi)自動報警系統(tǒng)檢查表
- 高速公路橋頭跳車判別和處治
- 骨髓細(xì)胞圖譜
- 建筑工程分部分項工程劃分表(新版)
- 勃利縣大四站鎮(zhèn)侵蝕溝治理工程施工組織設(shè)計
- 公路瀝青路面設(shè)計標(biāo)準(zhǔn)規(guī)范
- 普通高中歷史課程標(biāo)準(zhǔn)(2022年版2023年修訂)解讀
評論
0/150
提交評論