第11章位運算ppt課件_第1頁
第11章位運算ppt課件_第2頁
第11章位運算ppt課件_第3頁
第11章位運算ppt課件_第4頁
第11章位運算ppt課件_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第11章章 位運算位運算n11.1位運算的根本概念位運算的根本概念n由于言語是為研發(fā)系統(tǒng)軟件而設(shè)計的,為此它提供了類由于言語是為研發(fā)系統(tǒng)軟件而設(shè)計的,為此它提供了類似于匯編言語的一些功能,可實現(xiàn)將標志形狀從標志字節(jié)似于匯編言語的一些功能,可實現(xiàn)將標志形狀從標志字節(jié)中分別出來的位運算功能。正是由于中分別出來的位運算功能。正是由于C言語的這種作為高言語的這種作為高級言語,又具有低級言語的的功能,使得它的運用非常廣級言語,又具有低級言語的的功能,使得它的運用非常廣泛。泛。n所謂位運算是指,按二進制位進展的運算。為了節(jié)省內(nèi)存所謂位運算是指,按二進制位進展的運算。為了節(jié)省內(nèi)存空間,在系統(tǒng)軟件中常將多個

2、標志形狀簡單地組合在一同,空間,在系統(tǒng)軟件中常將多個標志形狀簡單地組合在一同,存儲到一個字節(jié)存儲到一個字節(jié)或字或字中。這也正是在系統(tǒng)軟件中經(jīng)常中。這也正是在系統(tǒng)軟件中經(jīng)常需求處置二進制問題的緣由。需求處置二進制問題的緣由。n11.1.1 運算符及其位運算運算符及其位運算n1運算符運算符nC言語提供的位運算符見表言語提供的位運算符見表11-1闡明:闡明:1表中只需按位取反表中只需按位取反為單目位運算符,其他均為單目位運算符,其他均為雙目運算符。為雙目運算符。2參與運算的操作數(shù)要求是整數(shù)或字符型數(shù)據(jù),并且參與運算的操作數(shù)要求是整數(shù)或字符型數(shù)據(jù),并且需轉(zhuǎn)換成二進制參與運算。需轉(zhuǎn)換成二進制參與運算。2

3、位運算位運算n1按位與&n格式:x&yn規(guī)那么:參與運算的兩個操作數(shù),按位進展與運算,假設(shè)對應(yīng)的二進制位均為1時,該位運算的結(jié)果為1,否那么該位為0。n主要用途:取或保管1個數(shù)的某些位,其他各位置0。n例如:取出11000101數(shù)的后4位,其他各位置0。n方法:n構(gòu)造一個數(shù)為00001111它的后4位是1與11000101進展按位與&運算。n 11000101n & 00001111n n 00000101n2按位或|n格式:x|yn規(guī)那么:對應(yīng)位均為0時才為0,否那么為1n主要用途:將1個數(shù)的某(些)位置1,其他各位不變。n例如:將00000101的最后2為置

4、1,其他各位不變。n方法:n構(gòu)造一個二進制數(shù)0000011它的后2位是1與00000101進展按位或|。n 00000101n | 00000011n n 00000111n3位異或n格式:xyn規(guī)那么:對應(yīng)位一樣時為0,相異時為1。n主要用途:使1個數(shù)的某(些)位翻轉(zhuǎn)(即原來為1的位變?yōu)?,為0的變?yōu)?),其他各位不變。n例如:將00000101數(shù)的后4位翻轉(zhuǎn),其他各位不變。n方法:n構(gòu)造一個數(shù)00001111它的后4位是1和00001111進展位異或運算。n n 00000101n 00001111n n00001010n4按位取反n格式:xn規(guī)那么:各位翻轉(zhuǎn),即原來為1的位變成0,原來為

5、0的位變成1。n主要用途:間接地構(gòu)造一個數(shù),以加強程序的可移植性。n例如,0000101=11111010n 00000101nn 11111010n5按位左移n格式:x 位數(shù)n規(guī)那么:使操作數(shù)的各位左移,低位補0,高位溢出n例如,52=20nn格式:x位數(shù)n規(guī)那么:使操作數(shù)的各位右移,移出的低位舍棄;高位:n82=2n 00001000nn 00000010n對無符號數(shù)和有符號中的正數(shù),補0;n有符號數(shù)中的負數(shù),取決于所運用的系統(tǒng):補0的稱為“邏輯右移,補1的稱為“算術(shù)右移。n闡明:n1操作數(shù)和運算所需求的參數(shù),如“位數(shù)等,都必需是整型或字符型數(shù)據(jù)。除按位取反為單目運算符外,其他均為雙目運算

6、符。n2參與運算時的操作數(shù)都必需首先轉(zhuǎn)換成二進制方式,然后再執(zhí)行相應(yīng)的按位運算。n例如,5 2=5:00010100 00000101。n11.2.2 位運算舉例n例題11.1 輸入一個正整數(shù)賦給int型變量i,然后從該變量的右端最低位開場的第3位起延續(xù)取4位輸出。即輸出第36位構(gòu)成的數(shù),從最低位為0號編號n解題思緒:n1先將變量i右移3位,將36位移到低4位上。即:i3。n2產(chǎn)生1個低4位為1、其他各位為0的整數(shù)r??捎靡韵率阶訉崿F(xiàn):nr=04n上式的運算步驟如下:n 0:00000000,00000000n0:11111111,11111111n04:11111111,11110000n0

7、3的結(jié)果進展按位與運算。n/*例題原代碼文件名:LX11_1.C*/nmain()n int i, r;n printf(“Please input a int number: );n scanf(“%d,&i);n i=3; /*右移3位,將36位移至低4位*/n r = (04); /*產(chǎn)生1個低4位為1、其他各位為0的整數(shù)*/nprintf(“new=%dn, i&r);n 程序運轉(zhuǎn)情況:Please input a integer number:215new = 10n闡明:n本程序輸215轉(zhuǎn)換成二進制為00000000,11010111給i變量。n然后右移3位后變?yōu)?

8、0000000,00011010給j變量,nj和產(chǎn)生的r=00000000,00001111進展按位與運算得00000000,00001010(即是十進制的10)n闡明:n1位運算也支持復(fù)合賦值運算符n除按位取反運算外,其他5個位運算符均可與賦值運算符一同,構(gòu)成復(fù)合賦值運算符: n&=、|+、=、=n2不同長度數(shù)據(jù)間的位運算低字節(jié)對齊,短數(shù)的高字節(jié)按最高位補位:n1對無符號數(shù)和有符號中的正數(shù),補0;n2有符號數(shù)中的負數(shù),補1。11.3 位段簡介位段簡介n以前引見過對內(nèi)存中信息的存取普通以字節(jié)為單位,但是有時在存儲一個信息時不用用1個字節(jié)或多個字節(jié),例如:“真或“假用1或0表示,只需1位

9、二進制即可。在計算機用于過程控制、參數(shù)檢測或數(shù)據(jù)通訊領(lǐng)域時,控制信息普通只占一個字節(jié)中的一個或幾個二進制位,因此經(jīng)常在一個字節(jié)中放幾個信息。這樣做可節(jié)省存儲空間。n1. 位段的概念與定義n用多個不同數(shù)據(jù)類型的成員可以構(gòu)建一個構(gòu)造類型,而當(dāng)構(gòu)造類型中的每個成員均以二進制位為單位定義長度時,這些成員就被稱為位段。n例如:n struct packetn unsigned a: 1;n unsigned b:2;n unsigned c:2;n unsigned d:3;n data;n其中a、b、c和d均為位段,分別占1位、2位、2位和3位。n2闡明n1由于位段類型是一種構(gòu)造類型,所以位段類型和位

10、段變量的定義,以及對位段即位段類型中的成員的援用,均與構(gòu)造類型和構(gòu)造變量一樣。n2對位段賦值時,要留意取置范圍。普通地說,長度為n的位段,其取值范圍是:02n-1。n例如:n前面定義位段時,其中unsigned b:2;表示data.b只占兩位,兩位二進制能表示的數(shù)范圍是03,所以它的取值范圍是:03。寫data.b1是正確的,假設(shè)寫成data.b6就是錯誤的。由于6的二進制數(shù)方式為110,data只需兩位,系統(tǒng)自動取110的低兩位10賦給data.b,即data.b=10。n3運用長度為0的無名位段,可使其后續(xù)位段從下1個字節(jié)開場存儲。n例如:nstruct packetn unsigned

11、 a: 1;n unsigned b: 2;n unsigned: 0; /*長度為0的無名位段*/n unsigned c: 2;n unsigned d: 3;n data;n原來延續(xù)存儲在一個字節(jié)中的a、b、c、d四個位段,由于參與了一個長度為0的無名位段,其后的兩個位段c和d就從下一個字節(jié)開場存儲,故此位段構(gòu)造共占兩個字節(jié)。n41個位段必需存儲在1個存儲單元通常為1字節(jié)中,不能跨2個存儲單元。假設(shè)本單元不夠包容某位段,那么從下1個單元開場存儲該位段??捎靡陨祥L度為0的無名位段方法來處置。n例如:nstruct packetn unsigned a: 3;n unsigned b: 4;n unsigned: 0; /*長度為0的無名位段*/n unsigned c: 3;n unsigned d: 3;n data;na和b占用7位,c需求3位,而第一個字節(jié)只剩下1位了,由于一個位段不能跨2個存儲單元,所以用unsigned: 0; 長度為0的無名位段,使其后的兩個位段c和d就從下一

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論