C語言程序設(shè)計(jì)模塊九位作訓(xùn)練_第1頁
C語言程序設(shè)計(jì)模塊九位作訓(xùn)練_第2頁
C語言程序設(shè)計(jì)模塊九位作訓(xùn)練_第3頁
C語言程序設(shè)計(jì)模塊九位作訓(xùn)練_第4頁
C語言程序設(shè)計(jì)模塊九位作訓(xùn)練_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、模塊九模塊九 位操作訓(xùn)練位操作訓(xùn)練能力目標(biāo)理解位運(yùn)算的含義及使用;了解位段的定義、存儲(chǔ)及使用。知識(shí)準(zhǔn)備知識(shí)準(zhǔn)備任務(wù)引例-不用第三個(gè)變量完成兩個(gè)變量值的交換。方案一:傳統(tǒng)算法是通過第三個(gè)變量完成交換。#void swap1(int *a,int *b) int temp; temp=*a; *a=*b; *b=temp;程程序序清清單單方案二:加減運(yùn)算,把第一個(gè)變量當(dāng)緩沖變量用。void swap2(int *a,int *b) *a=*a+*b; *b=*a-*b;/b中放原來a中的值 *a=*a-*b;/ 用這1條語句a = a + b - (b = a); 代替3條語句程序清單程序清單方案

2、三:乘除運(yùn)算,是把第一個(gè)變量當(dāng)緩沖變量用。void swap3(int *a,int *b) *a=(*a)*(*b); *b=(*a)/(*b);/b中放原來a中的值 *a=(*a)/(*b); / 用這1條語句a = a + b - (b = a); 代替3條語句程序清單程序清單方案四:異或運(yùn)算。#include stdio.hvoid swap4(int *a,int *b) *a=*a*b; *b=*a*b; *a=*a*b;int main() int a=123,b=321; swap1(&a,&b);printf(a=%d,b=%dn,a,b); swap2(&a

3、mp;a,&b); printf(a=%d,b=%dn,a,b); swap3(&a,&b); printf(a=%d,b=%dn,a,b);swap4(&a,&b);printf(a=%d,b=%dn,a,b); return 0;程序清單程序清單輸出結(jié)果輸出結(jié)果 a=321,b=123a=321,b=123a=123,b=321a=123,b=321a=321,b=123a=321,b=123a=123,b=321a=123,b=321說明位運(yùn)算符中除了“” 以外,均為二元運(yùn)算符。運(yùn)算量應(yīng)為整型或字符型的數(shù)據(jù)。9.1 位運(yùn)算符 位bit):二進(jìn)制位是

4、計(jì)算機(jī)中最小的信息單位:n位二進(jìn)制能表達(dá)2n個(gè)信息。 9.1.1 按位與運(yùn)算(&)第7位第6位第5位第4位第3位第2位第1位第0位MSB LSB10010101做中學(xué)做中學(xué)9-1 9-1 設(shè)有設(shè)有X=10X=10,Y=8Y=8,Z=X&YZ=X&Y按位與),求按位與),求Z Z的值。的值。#includevoid main() int X=10,Y=8; int Z; Z=X&Y; printf(“Z=%dn”;Z);程序清單程序清單輸出結(jié)果輸出結(jié)果 Z=8 Z=8知識(shí)點(diǎn)運(yùn)算規(guī)則 只有對(duì)應(yīng)的位都為1時(shí),按位與運(yùn)算的結(jié)果才為1,其他的情況均為0,即: 0&

5、0=0 0&1=0 1&0=0 1&1=1 示例分析:X=(1010=(000010102,Y=(810=(000010002 X00001010&Y00001000 Z00001000按位與運(yùn)算的用途可以對(duì)某位進(jìn)行清0操作 方法:將需要清0的對(duì)應(yīng)位與0進(jìn)行按位與操作即可。 如:若將00010011的低四位清0,只需將其低4位與0相與,高4位與1相與即可,也就是進(jìn)行以下操作: 00010011&11110000 00010000可以提取指定位 方法:將需要提取的位與1進(jìn)行按位與操作即可 如:假設(shè)有X=l0101110B,想取X的低4位。將X與Y=0000

6、1111B相與,即可得到X的低4位。則有: 10101110&00001111 00001110#includevoid main() int X=12,Y=9; int Z; Z=X|Y; printf(“Z=%dn”;Z);程序清單程序清單輸出結(jié)果輸出結(jié)果 Z=13 Z=139.1.2 按位或運(yùn)算(|)做中學(xué)做中學(xué)9-2 9-2 假設(shè)有假設(shè)有X=12X=12,Y=9Y=9,Z= X | YZ= X | Y按位或),則求按位或),則求Z Z 的值。的值。知識(shí)點(diǎn)運(yùn)算規(guī)則 只有對(duì)應(yīng)的位都為0時(shí),按位或運(yùn)算的結(jié)果才為0,其他的情況均為1,即:0|0=0 0|1=1 1|0=1 1|1=1

7、示例分析:X=(1210=(000011002,Y=(910=(000010012 X00001100|Y00001001 Z00001101位或運(yùn)算的用途 主要是對(duì)數(shù)據(jù)的某些位進(jìn)行置1操作。 方法:將需要置1的位與1進(jìn)行按位或操作即可。 如:假設(shè)有X=11010010B,想使X的低4位為l??蓪與Y=0000llllB按位相或。則有: 11010010|00001111 11011111#includevoid main() int X=10,Y=8; int Z; Z=XY; printf(“Z=%dn”;Z);程序清單程序清單輸出結(jié)果輸出結(jié)果 Z=2 Z=29.1.3 按位異或運(yùn)算()

8、做中學(xué)做中學(xué)9-3 9-3 設(shè)有設(shè)有X=10X=10,Y=8Y=8,Z=XYZ=XY按位異或),求按位異或),求Z Z的值。的值。知識(shí)點(diǎn)運(yùn)算規(guī)則 參與按位異或運(yùn)算的兩個(gè)二進(jìn)制位如果值相同,則結(jié)果為0,如果不同則結(jié)果為1.即: 00=0 01=1 10=1 11=0示例分析:X=(1010=(000010102,Y=(810=(000010002根據(jù)“異或的運(yùn)算規(guī)則,有: X00001010Y00001000 Z00000010按位異或運(yùn)算的用途與0異或,可以保留原值 方法:原數(shù)中的1與0進(jìn)行異或運(yùn)算得1,0與0異或運(yùn)算的0。 例如:將29與0按位異或可以保留29。具體如下: 000111010

9、0000000 00011101v 將特定位翻轉(zhuǎn)v 方法:要翻轉(zhuǎn)的位與1異或運(yùn)算,其余位與0異或運(yùn)算。v 例如:假設(shè)有X=10101110B,則想使X的低4位翻轉(zhuǎn)。v 根據(jù)“按位異或“的運(yùn)算規(guī)則,可將X與Y00001111B按位相異或,則有: 1010111000001111 10100001v 實(shí)現(xiàn)兩個(gè)變量值的交換v 9.1任務(wù)引例的方案四就是利用異或運(yùn)算完成了兩個(gè)變量值的交換。v 例如:a=5,b=4,利用異或運(yùn)算完成a=4,b=5。具體如下:v a=ab=101100=001v b=ab=001100=101v a=ab=101001=100v 完成了a,b的交換。#includevoi

10、d main() int X=10; int Z; Z=X; printf(“Z=%dn”;Z);程序清單程序清單輸出結(jié)果輸出結(jié)果 Z=11 Z=119.1.4 按位取反運(yùn)算()做中學(xué)做中學(xué)9-4 9-4 設(shè)有設(shè)有X=10X=10,Z=XZ=X按位取反),求按位取反),求Z Z的值。的值。知識(shí)點(diǎn)運(yùn)算規(guī)則 對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即將0變?yōu)閘,1變?yōu)?。 示例分析:X=(1010=(000010102,根據(jù)“取反的運(yùn)算規(guī)則,有:即Z=X=(11110101)2=(-11)10X00001010 Z11110101本卷須知單目運(yùn)算符,具有右結(jié)合性;運(yùn)算符的優(yōu)先級(jí)別最高。 9.1.5 左移運(yùn)算()語

11、法格式:an運(yùn)算規(guī)則:在移位過程中,各個(gè)二進(jìn)制位順序向左移動(dòng),右端空出的位補(bǔ)0,移出左端之外的位則被舍棄。例如:假?zèng)]有X=10,其二進(jìn)制的存儲(chǔ)形式為00001010,將X左移2位,即X=X2,求X的值。 9.1.6 右移運(yùn)算(n運(yùn)算規(guī)則:對(duì)于無符號(hào)數(shù)最高位即左端空出的位一律補(bǔ)0;對(duì)于有符號(hào)數(shù):正數(shù)則最高位補(bǔ)0,如果為負(fù)數(shù),左端最高位補(bǔ)0還是補(bǔ)1則取決于所用的C編譯系統(tǒng)。例如:有數(shù)X=10010001B X1:01001000B(邏輯右移) X1:11001000B(算術(shù)右移)#include void main() int x,y; printf(請(qǐng)輸入一個(gè)16進(jìn)制表示的正整數(shù):); scan

12、f(%x,&x); y=0; y=y; y4; x&=y; printf(該數(shù)的4-7位用十六進(jìn)制表示是:%xn,x);程程序序清清單單9.1.7 復(fù)合賦值位運(yùn)算做中學(xué)做中學(xué)9-5 9-5 將變量將變量x x的的 4-7 4-7位看成一個(gè)整數(shù)值,求這個(gè)值的大小。位看成一個(gè)整數(shù)值,求這個(gè)值的大小。程序運(yùn)行程序運(yùn)行 請(qǐng)輸入一個(gè)請(qǐng)輸入一個(gè)1616進(jìn)制表示的正整數(shù):進(jìn)制表示的正整數(shù):acdeacde該數(shù)的該數(shù)的4-74-7位用十六進(jìn)制表示是:位用十六進(jìn)制表示是:d d邊學(xué)邊練邊學(xué)邊練將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制形式。編寫一個(gè)位運(yùn)算演示器,該程序能演示計(jì)算機(jī)中每位二進(jìn)制位運(yùn)算的運(yùn)算過程。拓展提

13、升拓展提升9.2 位段9.2.1 位段的定義位段的語法格式: struct 位段名位段成員列表;位段列表的格式: 類型說明符 位段成員名:位段長(zhǎng)度; 如:struct wd int a:9; int b:3; int c:0; /*空域*/ unsigned d:5; /*從下一內(nèi)存單元開始存放*/ int i;/在Turbo C中i為16位 unsigned :8; /無名位段成員說明位段的成員類型必須為unsigned或int型;位數(shù)為1的位段只能用unsigned。每個(gè)位段成員的長(zhǎng)度不能超過字長(zhǎng)Turbo C中字長(zhǎng)為16位,即一個(gè)存儲(chǔ)單元為16位),所有位段成員的總長(zhǎng)度可以超過字長(zhǎng)。長(zhǎng)度

14、為0的位段叫空域,其作用是使下一個(gè)位段在下一個(gè)存儲(chǔ)單元中開始存放。各個(gè)位段必須依次單獨(dú)定義,不能把幾個(gè)位段組織成數(shù)組。位段可以含無名成員,這時(shí)它只用來作填充或調(diào)整位置,無名的位段成員是不能使用的。位段結(jié)構(gòu)中可以包含整型變量或數(shù)組成員,但變量或數(shù)組名后不能跟冒號(hào)和位數(shù),系統(tǒng)自動(dòng)將他們從新的存儲(chǔ)單元開始存放。位段結(jié)構(gòu)變量可以按位段初始化,初值表中,不需要初始化的位段用逗號(hào)跳過。9.2.2 位段的引用位段的引用和結(jié)構(gòu)成員的引用相同。一般形式為: 位段變量名. 位段成員名位段成員名使用與一般變量的使用一樣,可以進(jìn)行相應(yīng)的運(yùn)算。做中學(xué)做中學(xué)9-6 9-6 位段成員的輸出。位段成員的輸出。#include void main() struct unsigned a:1; unsigned b:3; int

溫馨提示

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