c語言程序設(shè)計基礎(chǔ)21第十五章位運算_第1頁
c語言程序設(shè)計基礎(chǔ)21第十五章位運算_第2頁
c語言程序設(shè)計基礎(chǔ)21第十五章位運算_第3頁
c語言程序設(shè)計基礎(chǔ)21第十五章位運算_第4頁
c語言程序設(shè)計基礎(chǔ)21第十五章位運算_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第15章 位運算 為了節(jié)省內(nèi)存空間,在系統(tǒng)軟件中常將多個標志狀態(tài)簡單地組合在一起,存儲到一個字節(jié)(或字)中。語言是為研制系統(tǒng)軟件而設(shè)計的,所以她提供了實現(xiàn)將標志狀態(tài)從標志字節(jié)中分離出來的位運算功能。所謂位運算是指,按二進制位進行的運算。 12.1 數(shù)值在計算機中的表示 12.2 位運算 Return12.1 數(shù)值在計算機中的表示 1.二進制位與字節(jié) 計算機系統(tǒng)的內(nèi)存儲器,是由許多稱為字節(jié)的單元組成的,1個字節(jié)由8個二進制位(bit)構(gòu)成,每位的取值為0/1。最右端的那1位稱為“最低位”,編號為0;最左端的那1位稱為“最高位”,而且從最低位到最高位順序,依次編號。圖11-1是1個字節(jié)各二進制位的

2、編號。 圖11-1 1個字節(jié)各二進制位的編號2.數(shù)值的原碼表示數(shù)值的原碼表示是指,將最高位用作符號位(0表示正數(shù),1表示負數(shù)),其余各位代表數(shù)值本身的絕對值(以二進制形式表示)的表示形式。為簡化描述起見,本節(jié)約定用1個字節(jié)表示1個整數(shù)。 76543210例如,+9的原碼是00001001 符號位上的0表示正數(shù) -9的原碼是10001001。 符號位上的1表示負數(shù) 3.數(shù)值的反碼表示數(shù)值的反碼表示分兩種情況:(1)正數(shù)的反碼:與原碼相同。例如,+9的反碼是00001001。(2)負數(shù)的反碼:符號位為1,其余各位為該數(shù)絕對值的原碼按位取反(1變0、0變1)。例如,-9的反碼:因為是負數(shù),則符號位為

3、“1”;其余7位為-9的絕對值+9的原碼0001001按位取反為1110110,所以-9的反碼是11110110。4.數(shù)值的補碼表示數(shù)值的補碼表示也分兩種情況:(1)正數(shù)的補碼:與原碼相同。例如,+9的補碼是00001001。(2)負數(shù)的補碼:符號位為1,其余位為該數(shù)絕對值的原碼按位取反;然后整個數(shù)加1。例如,-9的補碼:因為是負數(shù),則符號位為“1”;其余7位為-9的絕對值+9的原碼0001001按位取反為1110110;再加1,所以-9的補碼是11110111。已知一個數(shù)的補碼,求原碼的操作分兩種情況:(1)如果補碼的符號位為“0”,表示是一個正數(shù),所以補碼就是該數(shù)的原碼。(2)如果補碼的符

4、號位為“1”,表示是一個負數(shù),求原碼的操作可以是:符號位不變,其余各位取反,然后再整個數(shù)加1。例如,已知一個補碼為11111001,則原碼是10000111(-7):因為符號位為“1”,表示是一個負數(shù),所以該位不變,仍為“1”;其余7位1111001取反后為0000110;再加1,所以是10000111。5.數(shù)值在計算機中的表示補碼在計算機系統(tǒng)中,數(shù)值一律用補碼表示(存儲),原因在于:使用補碼,可以將符號位和其它位統(tǒng)一處理;同時,減法也可按加法來處理。另外,兩個用補碼表示的數(shù)相加時,如果最高位(符號位)有進位,則進位被舍棄。Return11.2 位 運 算12.2.1 位運算及其運算符 1按位

5、與& (1)格式:x&y (2)規(guī)則:對應(yīng)位均為1時才為1,否則為0:3&9=1。例如,3&9=1: 0011 & 1001 0001=1 (3)主要用途:取(或保留)1個數(shù)的某(些)位,其余各位置0。 2按位或| (1)格式:x|y (2)規(guī)則:對應(yīng)位均為0時才為0,否則為1:3|9=11。例如,3|9=11: 0011 | 1001 1011=11 (3)主要用途:將1個數(shù)的某(些)位置1,其余各位不變。3按位異或(1)格式:xy(2)規(guī)則:對應(yīng)位相同時為0,不同時為1:39=10。(3)主要用途:使1個數(shù)的某(些)位翻轉(zhuǎn)(即原來為1的位變?yōu)?,為0的變?yōu)?),其余各位不變。4按位取反(1

6、)格式:x(2)規(guī)則:各位翻轉(zhuǎn),即原來為1的位變成0,原來為0的位變成1:在IBM-PC機中,00 xffff,9=0 xfff6。(3)主要用途:間接地構(gòu)造一個數(shù),以增強程序的可移植性。5按位左移(1)格式:x 位數(shù)(2)規(guī)則:使操作數(shù)的各位左移,低位補0,高位溢出:5(1)格式:x位數(shù)(2)規(guī)則:使操作數(shù)的各位右移,移出的低位舍棄;高位:1)對無符號數(shù)和有符號中的正數(shù),補0;2)有符號數(shù)中的負數(shù),取決于所使用的系統(tǒng):補0的稱為“邏輯右移”,補1的稱為“算術(shù)右移”。例如,20 2=5。說明:(1)x、y和“位數(shù)”等操作數(shù),都只能是整型或字符型數(shù)據(jù)。除按位取反為單目運算符外,其余均為雙目運算符

7、。(2)參與運算時,操作數(shù)x和y,都必須首先轉(zhuǎn)換成二進制形式,然后再執(zhí)行相應(yīng)的按位運算。例如,5 2=5:10100 00101。(3)實現(xiàn)&、|、運算主要用途的方法 1)構(gòu)造1個整數(shù):該數(shù)在要?。ɑ虮A簦┑奈弧⒒蛞?的位、或要翻轉(zhuǎn)的位上為1,其余均為0。 2)進行按位與、或按位或、或按位異或操作。(4)實現(xiàn)按位取反主要用途的方法 1)求0,間接地構(gòu)造一個全1的數(shù); 2)按需要進行左移或右移操作,構(gòu)造出所需要的數(shù)。例如,直接構(gòu)造一個全1的數(shù),在IBM-PC機中為0 xffff(2字節(jié)),而在VAX-11/780上,卻是0 xffffffff(4字節(jié))。如果用0來構(gòu)造,系統(tǒng)可以自動適應(yīng)。具體應(yīng)

8、用,請參見案例11.1。12.2.2 應(yīng)用舉例案例11.1 從鍵盤上輸入1個正整數(shù)給int變量num,輸出由811位構(gòu)成的數(shù)(從低位、0號開始編號)。基本思路:(1)使變量num右移8位,將811位移到低4位上。(2)構(gòu)造1個低4位為1、其余各位為0的整數(shù)。(3)與num進行按位與運算。/*案例代碼文件名:AL11_1.C*/*程序功能:輸出一個整數(shù)中由811位構(gòu)成的數(shù)*/main() int num, mask; printf(Input a integer number: ); scanf(%d,&num); num = 8; /*右移8位,將811位移到低4位上*/ mask = ( 0

9、 4); /*間接構(gòu)造1個低4位為1、其余各位為0的整數(shù)*/ printf(result=0 x%xn, num & mask); 程序演示程序運行情況:Input a integer number:1000 result=0 x3程序說明: ( 0 4)按位取0的反,為全1;左移4位后,其低4位為0,其余各位為1;再按位取反,則其低4位為1,其余各位為0。這個整數(shù)正是我們所需要的。案例12.2 從鍵盤上輸入1個正整數(shù)給int變量num,按二進制位輸出該數(shù)。/*案例代碼文件名:AL11_2.C*/*程序功能:按二進制位輸出一個整數(shù)*/#include stdio.hmain() int num

10、, mask, i; printf(Input a integer number: ); scanf(%d,&num); mask = 115; /*構(gòu)造1個最高位為1、其余各位為0的整數(shù)(屏蔽字)*/ printf(%d= , num); for(i=1; i=16; i+) putchar(num&mask ? 1 : 0);/*輸出最高位的值(1/0)*/ num = 1; /*將次高位移到最高位上*/ if( i%4=0 ) putchar(,); /*四位一組,用逗號分開*/ printf(bBn); 程序演示程序運行情況:Input a integer number:1000 1000=00

溫馨提示

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

評論

0/150

提交評論