wcq位運算.ppt_第1頁
wcq位運算.ppt_第2頁
wcq位運算.ppt_第3頁
wcq位運算.ppt_第4頁
wcq位運算.ppt_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言-位運算與位域,大一講師團(tuán) 王誠強(qiáng),本課內(nèi)容,位運算 前面介紹的各種運算都是以字節(jié)作為最基本位進(jìn)行的。 但在很多系統(tǒng)程序中常要求在位(bit)一級進(jìn)行運算或處理。語言提供了位運算的功能, 這使得語言也能像匯編語言一樣用來編寫系統(tǒng)程序(這里說的和C中嵌入?yún)R編是不同的,是直接用C編寫)。,c=a,00001001 00000101 c=a|b;printf(a=%dnb=%dnc=%dn,a,b,c);,C語言,2. 按位“或”運算 按位或運算符“|”是雙目運算符。其功能是參與運算的兩數(shù)各對應(yīng)的二進(jìn)位相或。只要對應(yīng)的二個二進(jìn)位有一個為1時,結(jié)果位就為1。參與運算的兩個數(shù)均以補(bǔ)碼出現(xiàn)。例如:9

2、|5可寫算式如下: 00001001|0000010100001101 (十進(jìn)制為13)可見9|5=13,00001001 00000101 | 00001101,C語言,3. 按位“異或”運算 按位異或運算符“”是雙目運算符。其功能是參與運算的兩數(shù)各對應(yīng)的二進(jìn)位相異或,當(dāng)兩對應(yīng)的二進(jìn)位相異時,結(jié)果為1。參與運算數(shù)仍以補(bǔ)碼出現(xiàn),例如95可寫成算式如下: 0000100100000101 00001100 (十進(jìn)制為12),void main(void) int a=2; int b=3; a=ab; b=ba; a=ab; printf(a=%d,b=%d,a,b); ,結(jié)果是什么,為什么?,

3、00001001 00000101 00001100,a:00000010 b:00000011 a:00000001,b:00000011 a:00000001 b:00000010,a:00000001 b:00000010 a:00000011,b,a,C語言,4. “求反”運算 求反運算符為單目運算符,具有右結(jié)合性。 其功能是對參與運算的數(shù)的各二進(jìn)位按位求反。例如9的運算為: (0000000000001001)結(jié)果為:1111111111110110現(xiàn)在我們來看一下下面這個程序的結(jié)果會是多少呢?,int main(void) int a = 0; printf(%d,a); getc

4、h(); ,結(jié)果是 -1,為什么?,C語言,5. 左移運算 左移運算符“”是雙目運算符。其功能是把“ ”左邊的運算數(shù)的各二進(jìn)位全部右移若干位,“”右邊的數(shù)指定移動的位數(shù)。 例如: 設(shè) a=15,a2表示把000001111右移為00000011(十進(jìn)制3)。 應(yīng)該說明的是,對于有符號數(shù),在右移時,符號位將隨同移動。當(dāng)為正數(shù)時, 最高位補(bǔ)0,而為負(fù)數(shù)時,符號位為1,最高位是補(bǔ)0或是補(bǔ)1 取決于編譯系統(tǒng)的規(guī)定。Turbo C和很多系統(tǒng)規(guī)定為補(bǔ)1。,00000011,00000110,00001100,00011000,00110000,00001111,00000111,00000011,C語言,

5、main() unsigned a,b;printf(input a number: );scanf(%d,請再看一例!main() char a=a,b=b;int p,c,d;p=a;p=(p8;printf(a=%dnb=%dnc=%dnd=%dn,a,b,c,d);,struct 位域結(jié)構(gòu)名 位域列表 ;其中位域列表 的形式為: 類型說明符 位域名:位域長度,位域有些信息在存儲時,并不需要占用一個完整的字節(jié), 而只需占幾個或一個二進(jìn)制位。例如在存放一個開關(guān)量時,只有0和1 兩種狀態(tài), 用一位二進(jìn)位即可。為了節(jié)省存儲空間,并使處理簡便,語言又提供了一種數(shù)據(jù)結(jié)構(gòu),稱為“位域”或“位段”。所

6、謂“位域”是把一個字節(jié)中的二進(jìn)位劃分為幾個不同的區(qū)域, 并說明每個區(qū)域的位數(shù)。每個域有一個域名,允許在程序中按域名進(jìn)行操作。 這樣就可以把幾個不同的對象用一個字節(jié)的二進(jìn)制位域來表示。,struct bsint a:8;int b:2;int c:6;,一、位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相仿,其形式為:,位域變量的說明與結(jié)構(gòu)變量說明的方式相同。 可采用先定義后說明,同時定義說明或者直接說明這三種方式。例如: struct bs int a:8; int b:2; int c:6; data;說明data為bs變量,共占兩個字節(jié)。其中位域a占8位,位域b占2位,位域c占6位。,str

7、uct bsunsigned a:4unsigned :0 /*空域*/unsigned b:4 /*從下一單元開始存放*/unsigned c:4;,對于位域的定義尚有以下幾點說明:1. 一個位域必須存儲在同一個字節(jié)中,不能跨兩個字節(jié)。如一個字節(jié)所??臻g不夠存放另一位域時,應(yīng)從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:,在這個位域定義中,a占第一字節(jié)的4位,后4位填0表示不使用,b從第二字節(jié)開始,占用4位,c占用4位。,struct kint a:1int :2 /*該2位不能使用*/int b:3int c:2;,2. 由于位域不允許跨兩個字節(jié),因此位域的長度不能大于一

8、個字節(jié)的長度,也就是說不能超過8位二進(jìn)位。3. 位域可以無位域名,這時它只用來作填充或調(diào)整位置。無名的位域是不能使用的。例如:,從以上分析可以看出,位域在本質(zhì)上就是一種結(jié)構(gòu)類型, 不過其成員是按二進(jìn)位分配的,二、位域的使用 位域的使用和結(jié)構(gòu)成員的使用相同,其一般形式為: 位域變量名.位域名 位域允許用各種格式輸出。,main()struct bsunsigned a:1;unsigned b:3;unsigned c:4; bit,*pbit;bit.a=1;/*用bit.a=2代替這句看輸出有什么變化*/bit.b=7;bit.c=15;/*printf(“%dn”,sizeof(bit);

9、加上這句看一個bit的大小*/ printf(“%d,%d,%dn”,bit.a,bit.b,bit.c);pbit=,詳解,上例程序中定義了位域結(jié)構(gòu)bs,三個位域為a,b,c。說明了bs類型的變量bit和指向bs類型的指針變量pbit。這表示位域也是可以使用指針的。 程序的9、10、11三行分別給三個位域賦值。( 應(yīng)注意賦值不能超過該位域的允許范圍)。 程序第12行以整型量格式輸出三個域的內(nèi)容。 第13行把位域變量bit的地址送給指針變量pbit。 第14行用指針方式給位域a重新賦值,賦為0。 第15行使用了復(fù)合的位運算符“&=”, 該行相當(dāng)于: pbit-b=pbit-b&3位域b中原有值為7,與3作按位與運算的結(jié)果為3(111&011=011,十進(jìn)制值為3)。 同樣,程序第16行中使用了復(fù)合位運算|=, 相當(dāng)于: pbit-c=pbit-c|1其結(jié)果為15。程序第17行用指針方式輸出了這三個域的值。,課后思考,1.位運算應(yīng)當(dāng)運用在什么地方,如何運用? 2.位域用在什

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論