C語言程序設(shè)計(jì)教程第10章.ppt_第1頁
C語言程序設(shè)計(jì)教程第10章.ppt_第2頁
C語言程序設(shè)計(jì)教程第10章.ppt_第3頁
C語言程序設(shè)計(jì)教程第10章.ppt_第4頁
C語言程序設(shè)計(jì)教程第10章.ppt_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章 位 運(yùn) 算,位運(yùn)算是指對(duì)二進(jìn)制位進(jìn)行的運(yùn)算。每個(gè)二進(jìn)制位中只能存放0或1。因此,位運(yùn)算就是對(duì)二進(jìn)制數(shù)的運(yùn)算。通常,將一個(gè)數(shù)據(jù)用二進(jìn)制數(shù)表示后,最右邊的二進(jìn)制位稱為最低位(第0位),最左邊的二進(jìn)制位為最高位。,圖10.1 微機(jī)中整數(shù)的二進(jìn)制位表示,10.1 二進(jìn)制位運(yùn)算 10.2 位 段 10.3 程序舉例,10.1 二進(jìn)制位運(yùn)算,在C語言中共提供了6種位運(yùn)算符,如表10.1所示。 表10.1,返回目錄,(1)在這6種位運(yùn)算符中,其中按位取反是單目運(yùn)算符,只有一個(gè)運(yùn)算對(duì)象,其他均為雙目運(yùn)算符,有兩個(gè)運(yùn)算對(duì)象。 (2)位運(yùn)算的運(yùn)算對(duì)象只能是整型(包括int,short,long和unsigned)或字符型數(shù)據(jù),而不能是實(shí)型數(shù)據(jù)。 (3)各位運(yùn)算符的優(yōu)先級(jí)比較分散,與其他運(yùn)算符一起,其優(yōu)先級(jí)從高到低如下: 邏輯非(!)按位取反()算術(shù)運(yùn)算符左移運(yùn)算符()關(guān)系運(yùn)算符按位與運(yùn)算符(&),按位異或運(yùn)算符(),按位或運(yùn)算符(|)&與| 賦值運(yùn)算符,1“按位與”運(yùn)算符(&) “按位與”的運(yùn)算符為“&”。其運(yùn)算規(guī)則是:若兩個(gè)運(yùn)算對(duì)象的對(duì)應(yīng)二進(jìn)制位均是1,則結(jié)果的對(duì)應(yīng)位是1,否則為0。 利用“按位與”運(yùn)算可以實(shí)現(xiàn)以下功能: (1)取出數(shù)據(jù)中指定的位 (2)將數(shù)據(jù)中的指定位清零,2“按位或”運(yùn)算符(|) “按位或”的運(yùn)算符為“|”。其運(yùn)算規(guī)則是:若兩個(gè)運(yùn)算對(duì)象的對(duì)應(yīng)二進(jìn)制位中有一個(gè)是1,則結(jié)果的對(duì)應(yīng)位是1,否則為0。,例10.2 下列C程序的功能是將整型數(shù)組中所有元素轉(zhuǎn)換為不小于它的最小奇數(shù),并顯示輸出。 #include “stdio.h“ main() int k,a1023,14,24,31,46,55,33,68,27,40; for (k0;k10;k) printf(“%5d“,ak); printf(“n“); for (k0;k10;k) akak|0x01; for (k0;k10;k) printf(“%5d“,ak); printf(“n“); ,3“按位異或”運(yùn)算符() “按位異或”的運(yùn)算符為“” 。其運(yùn)算規(guī)則是:若兩個(gè)運(yùn)算對(duì)象的對(duì)應(yīng)二進(jìn)制位不相等,則結(jié)果的對(duì)應(yīng)位是1,否則為0。 “按位異或”運(yùn)算具有以下幾個(gè)性質(zhì): (1)使數(shù)據(jù)中的某些位取反,即將0變?yōu)?,1變?yōu)?。 (2)同一個(gè)數(shù)據(jù)進(jìn)行異或運(yùn)算后,其結(jié)果為0。利用異或運(yùn)算的這個(gè)性質(zhì),可以將變量清零。 (3)可以實(shí)現(xiàn)交換兩個(gè)變量的值:,4“按位取反”運(yùn)算符() “按位取反”的運(yùn)算符為“”。其運(yùn)算規(guī)則是:將運(yùn)算對(duì)象中的各二進(jìn)制位值取反,即將0變?yōu)?,1變?yōu)?。,5“左移”運(yùn)算符() “左移”運(yùn)算符為“”。其運(yùn)算規(guī)則是:將運(yùn)算對(duì)象中的每個(gè)二進(jìn)制位向左移動(dòng)若干位,從左邊移出去的高位部分被丟棄,右邊空出的低位部分補(bǔ)0。,6“右移”運(yùn)算符() “右移”運(yùn)算符為“”。其運(yùn)算規(guī)則是:將運(yùn)算對(duì)象中的每個(gè)二進(jìn)制位向右移動(dòng)若干位,從右邊移出去的低位部分被丟棄。但左邊空出的高位部分是補(bǔ)0還是補(bǔ)1,要視下列具體情況而定: 若右移對(duì)象為無符號(hào)整型數(shù),則右移后左邊空出的高位部分補(bǔ)0。 若右移對(duì)象為一般整型數(shù)或字符型數(shù)據(jù),當(dāng)該數(shù)據(jù)的最高位為0(對(duì)于一般整型來說即為正數(shù)),則右移后左邊空出的高位部分補(bǔ)0。當(dāng)該數(shù)據(jù)的最高位為1(對(duì)于一般整型來說即為正數(shù)),則與使用的計(jì)算機(jī)系統(tǒng)有關(guān),有的計(jì)算機(jī)系統(tǒng)將右移后左邊空出的高位部分補(bǔ)1,稱為“算術(shù)右移”;有的計(jì)算機(jī)系統(tǒng)將右移后左邊空出的高位部分補(bǔ)0,稱為“邏輯右移”。,10.2 位 段 在C語言中,定義位段結(jié)構(gòu)類型的一般形式為 struct 位段結(jié)構(gòu)類型名 成員表 ;,返回目錄,在定義位段與使用位段時(shí),要注意以下幾個(gè)問題: (1)位段成員的類型必須是unsigned型。 (2)在位段結(jié)構(gòu)類型中,可以定義無名位段,這種無名位段具有位段之間的分隔作用。 (3)每個(gè)位段(成員)所占的二進(jìn)制位數(shù)一般不能超過一個(gè)字長(即一個(gè)存儲(chǔ)單元)。 (4)在位段結(jié)構(gòu)類型定義中,可以包含非位段成員。 (5)位段可以在一般的表達(dá)式中被引用,并被自動(dòng)轉(zhuǎn)換為相應(yīng)的整數(shù)。,10.3 程序舉例,例10.3 編寫一個(gè)C程序,其功能是:從鍵盤輸入一個(gè) 無符號(hào)整數(shù)m以及位移位數(shù)n,當(dāng)n0時(shí),將m循環(huán)右 移n位;當(dāng)n0時(shí),將m循環(huán)左移|n|位。,返回目錄,將一個(gè)無符號(hào)整數(shù)m循環(huán)移n位的方法如下: 首先用sizeof函數(shù)確定一個(gè)無符號(hào)整數(shù)所占的二進(jìn)制位數(shù)k。 如果是循環(huán)右移,則先將m右移n位(即將原數(shù)的高kn位移到低位),再將m左移kn位(即將原數(shù)的低n位移到高位),然后將它們作按位或運(yùn)算(即將它們合并)。 如果是循環(huán)左移,則先將m左移n位(即將原數(shù)的低kn位移到高位),再將m右移kn位(即將原數(shù)的高n位移到低位),然后將它們作按位或運(yùn)算(即將它們合并)。,其C程序如下: #include “stdio.h“ main() unsigned m; int n; printf(“input m:“); scanf(“%x“,&m); printf(“input n:“); scanf(“%d“,&n); if (n0) printf(“moveright%xn“,moveright(m,n); else printf(“moveleft%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論