c語言設(shè)計(jì)(第二版)教學(xué)課件_第1頁
c語言設(shè)計(jì)(第二版)教學(xué)課件_第2頁
c語言設(shè)計(jì)(第二版)教學(xué)課件_第3頁
c語言設(shè)計(jì)(第二版)教學(xué)課件_第4頁
c語言設(shè)計(jì)(第二版)教學(xué)課件_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、c語言設(shè)計(jì)(第二版) -教學(xué)課件,制作人: 黃 熒 制作人單位:河師大數(shù)學(xué)與信息科學(xué)學(xué)院,第十二章 位運(yùn)算(按位運(yùn)算),幾種關(guān)于二進(jìn)制的按位運(yùn)算: 1 按位與、按位或 2 異或、取反 3 左移、右移 4 位段,00000011 存放黑白兩色也只需要1個(gè)數(shù)位. 即使存放8種顏色也僅只需要3個(gè)數(shù)位. 3 利用按位運(yùn)算可以非常方便的從一個(gè)字節(jié)中讀取和寫入一個(gè)或幾個(gè)數(shù)位上的數(shù)據(jù).,12.1 位運(yùn)算符和位運(yùn)算 (位:指的是二進(jìn)制的位!),C語言提供的六種位運(yùn)算:,說明: 1)除了取反運(yùn)算以外,都是二元運(yùn)算。 2)運(yùn)算量只能是整型或字符型數(shù)據(jù),不能是實(shí)型數(shù)據(jù)。,12.1.1 按位與運(yùn)算符( b=ba; a

2、=ab b=b(ab)=abb =a0=a 類似地:a=(ab)(b(ab)=aabbb=00b=b,用”按位與”在某些位上做清零, 用”按位或”在某些位上做置1, 用”異或”在某些位上做翻轉(zhuǎn)!,12.1.4 “取反”運(yùn)算符(),(一元運(yùn)算) 運(yùn)算規(guī)則:0=1,1=0 如: 求025,其中025為整型數(shù)占2個(gè)字節(jié)。 025= (0000 0000 0001 0101)2 = (1111 1111 1110 1010)2 =0177752 特別注意:取反的值是與其所占字節(jié)數(shù)相關(guān)的!,取反運(yùn)算的一個(gè)特殊應(yīng)用 : 將一個(gè)數(shù)的最低位置零。 當(dāng)整數(shù)為16位: a 15=(00001111)2 151=(

3、00011110)2=036=30 類似的: a=15, a=a2; 152=(00111100)2=074=60 但是:a=128, a=a1; 128=(10000000)2 1281=(00000000)2=0 (出現(xiàn)溢出?。?很容易看出,當(dāng)無溢出時(shí): a1a*2 a),an 作用:將a的各二進(jìn)制數(shù)位依次右移n位,左邊補(bǔ)0或補(bǔ)1。 無符號(hào)數(shù):左補(bǔ)0 有符號(hào)數(shù): a=0: 左補(bǔ)0 a2=(0000 1111)2 2 =(0000 0011)2=03 2) a=-7 a2=(11111001)2 2 =(11111110)2(補(bǔ)) =-2 另外: 與左移類似 a1a/2 (整除) ana/2

4、n (整除) 但注意到負(fù)數(shù)的舍入方向與正數(shù)不同, -7/2=-4向遠(yuǎn)離0的方向舍入。,12.1.7位運(yùn)算賦值運(yùn)算符, int b=2; a=a; b=b; 所得到的結(jié)果是不同的。,12. 2 位運(yùn)算舉例,例12.1 取一個(gè)整數(shù)a從右端開始的47位。 (注意到,內(nèi)存中的最低位是0位。),方法1:(最簡(jiǎn)單的方法) 右移4位,將所取位移至最低位:b=a4; 取出最低4位: c=b,方法2: 將方法1的017用反運(yùn)算表示。 構(gòu)造017的要點(diǎn)是: 用反運(yùn)算構(gòu)造一個(gè)高位為0,低4位為1的數(shù)。 a) 從0開始,0=00000(可16位,也可32位) b) 取反:0=11111 (可16位,也可32位) c)

5、 左移4位使低4位為0(可一般化為n):04; c=(04; c=(0(m-n+1); (將第m位開始的n位移至最低位) 2) c=(0n 將b與c作按位或即得所求: c=c|b,12.3 位段 (位域),位段是為了使一個(gè)字節(jié)中的數(shù)位的讀取更為方便直觀而設(shè)置的. 位段是結(jié)構(gòu)體中特殊的成員,它們是以數(shù)位來定義長(zhǎng)度的,而不是以字節(jié)。,如, struct packed_data unsigned a:2; /*成員a為一個(gè)占2個(gè)二進(jìn)制數(shù)位的位段。*/ unsigned b:6; /*b,c,d也為位段*/ unsigned c:4; unsigned d:4; int i; data;,(共4個(gè)字節(jié)

6、),位段的引用,對(duì)段位可以象一般整型變量要樣給它賦值,但需要注意的是:不要超出它的取值范圍。 如: struct packed_data unsigned a:2; unsigned b:3; unsigned c:4; int i; data; dataa=3 ; dataa=6 ; 因?yàn)閍僅占2個(gè)二進(jìn)制數(shù)位,最大存儲(chǔ)的數(shù)值為3。(溢出錯(cuò)誤),例 各位段長(zhǎng)度之和可以不為整字節(jié)。,如, struct packed_data unsigned a:2; unsigned b:3; unsigned c:4; int i; data;,(共4個(gè)字節(jié)),位段的定義和引用 的幾點(diǎn)說明: (1-7),1

7、)位段成員的類型必須指定為unsigned或int類型。 2)若某一位段要從另一個(gè)字開始,可以利用長(zhǎng)度為0的位段來實(shí)現(xiàn)(規(guī)定)。,如: unsigned a:1; unsigned b:2; unsigned :0; unsigned c:3;,3)一個(gè)位段必須存儲(chǔ)在同一個(gè)存儲(chǔ)單元(一個(gè)字,不是字節(jié))中,不能跨兩個(gè)存儲(chǔ)單元。,如:unsigned a:12; unsigned b:14;,4)可以定義無名位段。,5)位段的長(zhǎng)度不能大于一個(gè)字,也不能定義位段數(shù)組。 6)可以用整型格式符輸出 如,用%d,%o,%x,%u等格式輸出 7)可以用于表達(dá)式中,它會(huì)被系統(tǒng)自動(dòng)轉(zhuǎn)化為整型的。,如: unsigned a:1; unsi

溫馨提示

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