c語(yǔ)言第17章位運(yùn)算操作符_第1頁(yè)
c語(yǔ)言第17章位運(yùn)算操作符_第2頁(yè)
c語(yǔ)言第17章位運(yùn)算操作符_第3頁(yè)
c語(yǔ)言第17章位運(yùn)算操作符_第4頁(yè)
c語(yǔ)言第17章位運(yùn)算操作符_第5頁(yè)
已閱讀5頁(yè),還剩36頁(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)介

1、第17章 位運(yùn)算操作符在本章的學(xué)習(xí)中,需要掌握以下內(nèi)容:字節(jié)和位的概念;原碼與補(bǔ)碼的轉(zhuǎn)換;6種位操作符及其組成的位運(yùn)算賦值操作符的使用;各個(gè)位操作符的特殊用途;位域的概念和位域的使用。17.1 位運(yùn)算位運(yùn)算是指對(duì)數(shù)據(jù)的二進(jìn)制位進(jìn)行處理的運(yùn)算。位運(yùn)算與數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式息息相關(guān),因此在介紹位運(yùn)算操作符之前,有必要先介紹一些操作系統(tǒng)中數(shù)據(jù)存儲(chǔ)和處理的相關(guān)知識(shí)。本節(jié)首先介紹字節(jié)與位的概念以及兩者的關(guān)系,再介紹數(shù)據(jù)在內(nèi)存中的儲(chǔ)存方式。17.1.1 字節(jié)與位在前面的介紹中已多次涉及到字節(jié)的概念。操作系統(tǒng)中的各種類型的數(shù)值都由若干個(gè)字節(jié)組成,字節(jié)也是數(shù)據(jù)存取和數(shù)值計(jì)算的基本單元。從內(nèi)存中讀取數(shù)據(jù)是以字

2、節(jié)為最小單位,向內(nèi)存中寫入數(shù)據(jù)也是以字節(jié)為最小單位。將數(shù)值輸出到文件和從文件獲取數(shù)值時(shí),最小單位也是字節(jié)。17.1.1 字節(jié)與位字節(jié)在操作系統(tǒng)中可以分為更小的單元“位”。大部分系統(tǒng)中,1個(gè)字節(jié)由8個(gè)位組成,每個(gè)位的值為0或1。一個(gè)字節(jié)的數(shù)值由其8個(gè)位的值決定,如果一個(gè)字節(jié)的內(nèi)容為“01101010”。其對(duì)應(yīng)的值為:這個(gè)字節(jié)的值為8個(gè)位組成的二進(jìn)制數(shù)。但是在操作系統(tǒng)中,數(shù)值的存儲(chǔ)并不是直接以其二進(jìn)制值存儲(chǔ)的。17.1.2 補(bǔ)碼在操作系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)存儲(chǔ)。一個(gè)數(shù)值的二進(jìn)制值可以稱其為原碼,存儲(chǔ)時(shí)會(huì)將原碼表示為補(bǔ)碼。補(bǔ)碼的最高位為符號(hào)位,數(shù)值的補(bǔ)碼表示可以分為以下兩種情況。17.1.2 補(bǔ)碼

3、1非負(fù)數(shù)的補(bǔ)碼非負(fù)數(shù)的補(bǔ)碼與原碼相同。例如,11的原碼為00001011,其補(bǔ)碼也為00001011。注意:為了簡(jiǎn)化書寫,討論位運(yùn)算時(shí),大部分的數(shù)值只用一個(gè)字節(jié)表示。 2負(fù)數(shù)的補(bǔ)碼負(fù)數(shù)的補(bǔ)碼的符號(hào)位為1,其余位為將該數(shù)絕對(duì)值的原碼按位取反后再加1的結(jié)果。例如,-15的補(bǔ)碼:因?yàn)槭秦?fù)數(shù),則符號(hào)位為“1”,整個(gè)為10001111;其余7位為-15的絕對(duì)值的原碼按位取反,即0001111取反后為1110000,再加1為1110001;加上符號(hào)位,最后15的補(bǔ)碼是11110001。已知一個(gè)數(shù)的補(bǔ)碼,其求原碼的過(guò)程與已知原碼求補(bǔ)碼的過(guò)程完全一樣:如果補(bǔ)碼的符號(hào)位為“0”,表示是一個(gè)正數(shù),所以補(bǔ)碼就是該數(shù)

4、的原碼。如果補(bǔ)碼的符號(hào)位為“1”,表示是一個(gè)負(fù)數(shù),求原碼的操作可以是:符號(hào)位為1,其余各位取反加1。使用補(bǔ)碼計(jì)算時(shí),可以將符號(hào)位和其他位統(tǒng)一處理。17.1.2 補(bǔ)碼例如,7 + 15,其補(bǔ)碼相加如左圖所示。(-7) + (-15),其補(bǔ)碼相加如右圖所示。17.1.2 補(bǔ)碼注意:兩個(gè)用補(bǔ)碼表示的數(shù)相加時(shí),如果最高位(符號(hào)位)有進(jìn)位,則進(jìn)位被舍棄。減法也可按加法來(lái)處理,7 15的計(jì)算過(guò)程如下圖所示。17.1.2 補(bǔ)碼17.2 位運(yùn)算操作符C語(yǔ)言共提供了6個(gè)位運(yùn)算操作符,包括取反操作符()、位或操作符(|)、位與操作符(&)、異或操作符()和位移操作符(和)右移操作符的作用是將一個(gè)數(shù)的各二進(jìn)制值全部

5、右移若干位。其使用形式如下:數(shù)值1 數(shù)值2;該表達(dá)式將數(shù)值1的二進(jìn)制值右移(數(shù)值2)位,移到右端的低位被舍棄,而高位補(bǔ)入的數(shù)值由符號(hào)位決定。如果是無(wú)符號(hào)數(shù),則高位補(bǔ)入的數(shù)為0。例如:int a = 39;a = a 2; 則變量a將右移兩位,即00100111右移兩位,得到00001001,右端的兩個(gè)1被舍棄。如下圖所示。17.2.5 右移操作符()17.2.5 右移操作符()如果是有符號(hào)數(shù),則不同的系統(tǒng)有不同的處理方式。有的系統(tǒng)補(bǔ)入0,有的補(bǔ)入符號(hào)位。補(bǔ)入0的為“邏輯右移”,補(bǔ)入原符號(hào)位的為“算術(shù)右移”。例如,將-15右移兩位,算術(shù)右移后結(jié)果為11111100,邏輯右移結(jié)果為00111100

6、,如下圖所示。17.2.6 左移操作符()左移操作符將一個(gè)數(shù)的各個(gè)二進(jìn)制位值全部左移若干位。使用形式如下:數(shù)值1 數(shù)值2;該表達(dá)式將數(shù)值1的二進(jìn)制值左移(數(shù)值2)位,移到左端的高位被舍棄,而低位補(bǔ)入的數(shù)值為0。例如:int a = 39;int b = a 1;int c = a 2;int d = a 3; a的值為39,即00100111;b的值為39左移1位的結(jié)果,左端舍去1個(gè)0,右端補(bǔ)入1個(gè)0,得到01001110;c值為39左移2位的結(jié)果,左端舍去2個(gè)0,右端補(bǔ)入2個(gè)0,得到10011100;d值為39左移3位的結(jié)果,左端舍去2個(gè)0和1個(gè)1,右端補(bǔ)入3個(gè)0,得到00111000,如下

7、圖所示。17.2.6 左移操作符()17.2.6 左移操作符(= 3;等效于a = a 3;又例如:a &= b;等效于a = a & b范例17-7第20行也可以改寫為:flag = 1;17.3 位運(yùn)算操作符使用舉例位運(yùn)算操作符在C語(yǔ)言中的使用十分靈活,通過(guò)一些巧妙地算法可以高效地實(shí)現(xiàn)一些實(shí)用的功能。為了更熟悉位運(yùn)算操作符的使用,本節(jié)將繼續(xù)討論兩個(gè)例子。17.3.1 循環(huán)移位循環(huán)移位是一種重要的移位方式。循環(huán)移位區(qū)別于一般移位的是移位時(shí)沒(méi)有數(shù)位的丟失。循環(huán)左移時(shí),用從左邊移出的位填充字的右端;而循環(huán)右移時(shí),用從右邊移出的位填充字的左側(cè)。本題暫只討論循環(huán)右移。例如,要將39循環(huán)右移2位,即0

8、0100111右移兩位,移到右端的兩個(gè)1不會(huì)丟失,將補(bǔ)到左端的2個(gè)空缺位置上,如下圖所示。17.3.1 循環(huán)移位例如要對(duì)a(無(wú)符號(hào)數(shù))循環(huán)右移3位,可以采用以下方案:(1)首先把將要移出右端的3個(gè)位左移8-3位(假定a占8個(gè)位)后保存在b中,此時(shí)b形式如下圖第2行所示,其中yyy是a的后3位。(2)將a右移3位,右端3位被舍棄,又由于a為無(wú)符號(hào)數(shù),左端添加3個(gè)0,如下圖第3行所示。(3)最后將a與b位或,由于0和任意值位或補(bǔ)改變?cè)撝?,因此得到y(tǒng)yyxxxxx,如下圖第4行所示。17.3.2 使用子網(wǎng)掩碼子網(wǎng)掩碼是一個(gè)32位地址,用于屏蔽IP地址的一部分以區(qū)別網(wǎng)絡(luò)標(biāo)識(shí)和主機(jī)標(biāo)識(shí),并說(shuō)明該IP地址是在局域網(wǎng)上,還是在外部網(wǎng)上。如果一個(gè)IP地址與子網(wǎng)掩碼相與的結(jié)果與一個(gè)子網(wǎng)地址相同,那么這個(gè)IP地址便屬于該子網(wǎng)。有兩個(gè)子網(wǎng)地址59.64.200.0和59.64.201.0,兩個(gè)IP地址59.64.200.18和59.64.201.20,子網(wǎng)

溫馨提示

  • 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)論