第12章老師專用C語言PPT_第1頁
第12章老師專用C語言PPT_第2頁
第12章老師專用C語言PPT_第3頁
第12章老師專用C語言PPT_第4頁
第12章老師專用C語言PPT_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、12022-2-912第第12章位運算章位運算l 主要內(nèi)容 12.112.1位運算符和位運算位運算符和位運算 12.212.2位運算舉例位運算舉例 12.312.3位段位段32022-2-93 概念l 位運算是指按二進制位進行的運算。因為在系統(tǒng)軟件中,常要處理二進制位的問題。l 例如:將一個存儲單元中的各二進制位左移或右移一位,兩個數(shù)按位相加等。l 語言提供位運算的功能,與其他高級語言(如PASCAL)相比,具有很大的優(yōu)越性。4 12.1 位運算符和位運算2022-2-94運算符 含義 運算符 含義 按位與 取反 | 按位或 右移(1)位運算符中除以外,均為二目(元)運算符,即要求兩側(cè)各有一個

2、運算量。(2)運算量只能是整型或字符型的數(shù)據(jù),不能為實型數(shù)據(jù)。語言提供的位運算符有: 5 12.1.1“按位與”運算符()2022-2-95按位與是指:參加運算的兩個數(shù)據(jù),按二進制位進行“與”運算。如果兩個相應(yīng)的二進制位都為,則該位的結(jié)果值為;否則為。即:,例:例:并不等于,應(yīng)該是按位與運算:注意:如果參加如果參加& &運算的是運算的是負數(shù)(如負數(shù)(如-3&-5-3&-5),),則要以補碼形式表示則要以補碼形式表示為二進制數(shù),然后再為二進制數(shù),然后再按位進行按位進行“與與”運算。運算。 00000011(3)& & 00000101(5) 000

3、00001(1) 3&5的值得6按位與的用途:2022-2-96 若想對一個存儲單元清零,即使其全部二進制位為,只要找一個二進制數(shù),其中各個位符合以下條件:原來的數(shù)中為的位,新數(shù)中相應(yīng)位為。然后使二者進行運算,即可達到清零目的。(1) 清零 例:例: 原有數(shù)為,另找一個數(shù),設(shè)它為,這樣在原數(shù)為的位置上,該數(shù)的相應(yīng)位值均為。將這兩個數(shù)進行運算: 00101011& & 10010100 00000000 72022-2-97 (2) 取一個數(shù)中某些指定位 如有一個整數(shù)(個字節(jié)),想要取其如有一個整數(shù)(個字節(jié)),想要取其中的低字節(jié),只需將與中的低字節(jié),只需將與8 8個個1

4、1按位與即按位與即可???。 0 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0abc0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 10 0 0 0 0 0 0 0 1 0 1 0 1 1 0 082022-2-98 (3)保留一位的方法:與一個數(shù)進行運算,此數(shù)在該位取。即:a=84,b=59 c=a&b=16例:例:有一數(shù),想把其中左面第、位保留下來,運算如下: 01010100(84)& & 00111011(59) 00010000(16) 9 12.1.2 “按位或”運算符(|)2022-2-99 兩個相應(yīng)的二進制位中只要有一個為,該位的

5、結(jié)果值為。即 |,|,|,|例:例: 060|017,將八進制數(shù)60與八進制數(shù)17進行按位或運算。 00110000| 00001111 00111111 102022-2-910應(yīng)用:應(yīng)用:按位或運算常用來對一個數(shù)據(jù)的某按位或運算常用來對一個數(shù)據(jù)的某些位定值為。例如:如果想使一個些位定值為。例如:如果想使一個數(shù)的低位改為,只需將與數(shù)的低位改為,只需將與進行按位或運算即可。進行按位或運算即可。例:例: 是一個整數(shù)(位),是一個整數(shù)(位), 有表達式:有表達式: | | 則低位全置為,高位保留原則低位全置為,高位保留原樣。樣。1112.1.3“異或”運算符()2022-2-911 異或運算符也稱

6、XOR運算符。它的規(guī)則是:若參加運算的兩個二進制位同號則結(jié)果為(假) 異號則結(jié)果為(真)即:00=0,01=1,10=1, 11=0即即:071052=023 :071052=023 (八進制數(shù))(八進制數(shù)) 00111001 00101010 00010011 例:例:122022-2-912() 使特定位翻轉(zhuǎn)設(shè)有,想使其低位翻轉(zhuǎn),即變?yōu)?,變?yōu)???梢詫⑺c進行運算,即:運算符應(yīng)用:運算符應(yīng)用: 01111010 00001111 01110101 運算結(jié)果的低位正好是原數(shù)低位的翻轉(zhuǎn)。可見,要使哪幾位翻轉(zhuǎn)就將與其進行運算的該幾位置為即可。132022-2-913因為原數(shù)中的與進行運算得,得,故

7、保留原數(shù)。例如:01200=012() 與相,保留原值 00001010 00000000 00001010142022-2-914() 交換兩個值,不用臨時變量例如:,。想將和的值互換,可以用以下賦值語句實現(xiàn):ab;ba;ab; () (ab的結(jié)果,a已變成)() (ba的結(jié)果,b已變成)() (ab的結(jié)果,a已變成)152022-2-915 執(zhí)行前兩個賦值語句:“;”和“;”相當于b=b(ab)。 再執(zhí)行第三個賦值語句: 。由于a的值等于(),b的值等于(),因此,相當于a=,即a的值等于,等于。 得到原來的值。即等效于以下兩步:16 12.1.4 “取反”運算符()2022-2-916

8、是一個單目(元)運算符,用來對一個二進制數(shù)按位取反,即將變,將變。例如,是對八進制數(shù)(即二進制數(shù))按位求反。 0000000000010101() 1111111111101010 (八進制數(shù)八進制數(shù)177752)177752)17L62022-2-917L718L82022-2-918L919 12.1.5 左移運算符()2022-2-919 左移運算符是用來將一個數(shù)的各二進制位全部左移若干位。 例如:a=)2022-2-921 右移運算符是a2表示將a的各二進制位右移2位,移到右端的低位被舍棄,對無符號數(shù),高位補0。例如: a=017時: a的值用二進制形式表示為00001111, 舍棄低

9、2位11: a2=00000011右移一位相當于除以2 2 右移n n位相當于除以2n2n。 222022-2-922在右移時,需要注意符號位問題: 對無符號數(shù),右移時左邊高位移入0;對于有符號的值,如果原來符號位為0(該數(shù)為正),則左邊也是移入0。如果符號位原來為1(即負數(shù)),則左邊移入0還是1,要取決于所用的計算機系統(tǒng)。有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯右移”,即簡單右移;移入1的稱為“算術(shù)右移”。 232022-2-923例:例: a的值是八進制數(shù)113755: a:1001011111101101 (用二進制形式表示)a1: 0100101111110110 (邏輯右移

10、時)a1: 1100101111110110 (算術(shù)右移時) 在有些系統(tǒng)中,a1得八進制數(shù)045766,而在另一些系統(tǒng)上可能得到的是145766。Turbo C和其他一些C編譯采用的是算術(shù)右移,即對有符號數(shù)右移時,如果符號位原來為1,左面移入高位的是1。242022-2-92412.1.7 12.1.7 位運算賦值運算符位運算賦值運算符 位運算符與賦值運算符可以組成復(fù)合賦值運算符。 例如: &=, |=, =, =, =例: a & = b相當于 a = a & b a =2相當于a = a 225 12.3 位段2022-2-925 信息的存取一般以字節(jié)為單位。實際上

11、,有時存儲一個信息不必用一個或多個字節(jié),例如,“真”或“假”用或表示,只需位即可。在計算機用于過程控制、參數(shù)檢測或數(shù)據(jù)通信領(lǐng)域時,控制信息往往只占一個字節(jié)中的一個或幾個二進制位,常常在一個字節(jié)中放幾個信息。262022-2-926可以人為地將一個整型變量data分為幾部分。 但是用這種方法給一個字節(jié)中某幾位賦值太麻煩??梢晕欢谓Y(jié)構(gòu)體的方法。 怎樣向一個字節(jié)中的一個或幾個二進制位賦值和改變它的值呢?可以用以下兩種方法:(2)位段 C語言允許在一個結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長度,這種以位為單位的成員稱為“位段”或稱“位域” ( bit field) 。利用位段能夠用較少的位數(shù)存儲數(shù)據(jù)。

12、 272022-2-927程序如下:struct packed-data unsigned :; unsigned:; unsigned:; unsigned:; int ; data; 282022-2-928(1)位段成員的類型必須指定為unsigned或int類型。(2) 若某一位段要從另一個字開始存放,可用以下形式定義:unsigned :1;unsignedb:;一個存儲單元 unsigned:;unsigned:;另一存儲單元 a、b、c應(yīng)連續(xù)存放在一個存儲單元中,由于用了長度為的位段,其作用是使下一個位段從下一個存儲單元開始存放。因此,只將a、b存儲在一個存儲單元中,c另存在下一個單元(“存儲單元”可能是一個字節(jié),也可能是2個字節(jié),視不同的編譯系統(tǒng)而異)。 關(guān)于位段的定義和引用的說明:292022-2-929(3) 一個位段必須存儲在同一存儲

溫馨提示

  • 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

提交評論