版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本章目錄9.1位運算符9.2位域前面介紹的各種運算都是以字節(jié)作為最基本位進行的。但在很多系統(tǒng)程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,所謂的位運算是進行二進制位的運算。這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。9.1位運算符C語言提供了六種位運算符:運算符含義
&按位與|按位或^按位異或~取反<<左移>>右移說明:
(1)位運算符中除了~,均為二目運算符。
(2)運算對象只能是整型或字符型的數(shù)據(jù),不能為其它類型。9.1位運算符9.1.1按位與運算
按位與運算符"&"是雙目運算符。其功能是參與運算的兩數(shù)各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1,否則為0。參與運算的數(shù)以補碼方式出現(xiàn)。例如:9&5可寫算式如下:00001001(9的二進制補碼)&00000101(5的二進制補碼)
00000001(1的二進制補碼)可見9&5=1。00001001&0000010100000001按位與運算通常用來對某些位清0或保留某些位。例如即想讓某一個字節(jié)或多個字節(jié)中的位為0。例如:00001001(十進制9)只要找到這樣的數(shù)00000110、11110110、00000000等都可以,即只要和要清零數(shù)中每一個二進制位相反即可,或者某一位二進制位為0和0與結果也是0。
9.1位運算符例9.1按位與程序舉例main(){inta=9,b=5,c;c=a&b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}運行結果:9.1位運算符9.1.2按位或運算
按位或運算符“|”是雙目運算符。其功能是參與運算的兩數(shù)各對應的二進位相或。只要對應的兩個二進位有一個為1時,結果位就為1。參與運算的兩個數(shù)均以補碼出現(xiàn)。例如:9|5可寫算式如下:00001001|0000010100001101(十進制為13)可見9|5的結果為13。按位或通常用來使某位二進制位為1。例如:00001001(十進制9)使前4位二進制位為1,與11110000、11111001等數(shù)進行按位或運算即可9.1位運算符例9.2按位或程序舉例main(){inta=9,b=5,c;c=a|b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}運行結果:9.1位運算符9.1.3按位異或運算按位異或運算符“^”是雙目運算符。其功能是參與運算的兩數(shù)各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數(shù)仍以補碼出現(xiàn),例如9^5可寫成算式如下:00001001^0000010100001100(十進制為12)9^5結果為12。按位異或通常用來:(1)與0異或,可以保留原值不變。如10^000001010
^00000000000010109.1位運算符(2)可以不使用中間變量,將兩個數(shù)交換。例如a=2,b=3,是兩個數(shù)交換,可以用下面的語句:a=a^b;b=b^a;a=a^b;例9.3按位異或程序舉例。main(){inta=2,b=3;a=a^b;b=b^a; a=a^b;printf("a=%d,b=%d\n",a,b);}運行結果:9.1位運算符9.1.4求反運算求反運算符~為單目運算符,具有右結合性。其功能是對參與運算的數(shù)的各二進位按位求反。例如~9的運算為:~(0000000000001001)結果為:1111111111110110。9.1位運算符9.1.5左移運算
左移運算符“<<”是雙目運算符。其功能把“<<”左邊的運算數(shù)的各二進位全部左移若干位,由“<<”右邊的數(shù)指定移動的位數(shù),高位丟棄,低位補0。例如:a<<2指把a的各二進位向左移動2位。如a=2,十進制00000010,左移2位后為00001000(十進制8)。高位左移,低位補0。并且左移一位相當于乘以2的運算,左移兩位相當于乘以4即22。例9.4左移程序舉例
main(){inta=2;a=a<<2;printf(“a=%d\n”,a);}運算結果:9.1位運算符9.1.6右移運算右移運算符“>>”是雙目運算符。其功能是把“>>”左邊的運算數(shù)的各二進位全部右移若干位,“>>”右邊的數(shù)指定移動的位數(shù)。例如:設a=12,a>>2表示把000001100右移為00000011(十進制3)。應該說明的是,對于有符號數(shù),在右移時,符號位將隨同移動。當為正數(shù)時,最高位補0,而為負數(shù)時,符號位為1,最高位是補1。9.1位運算符例9.4左移程序舉例
main(){inta=12;a=a>>2;printf(“a=%d\n”,a);}運算結果:9.2位域有些信息在存儲時,并不需要占用一個完整的字節(jié),而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1兩種狀態(tài),用一位二進位即可。為了節(jié)省存儲空間,并使處理簡便,C語言又提供了一種數(shù)據(jù)結構,稱為“位域”或“位段”。所謂“位域”是把一個字節(jié)中的二進位劃分為幾個不同的區(qū)域,并說明每個區(qū)域的位數(shù)。每個域有一個域名,允許在程序中按域名進行操作。這樣就可以把幾個不同的對象用一個字節(jié)的二進制位域來表示。1.位域的定義與結構體定義類似,形式為:struct位域結構名{位域列表};其中位域列表的形式為:類型說明符位域名:位域長度9.2位域例如:structbs{inta:8;intb:2;intc:6;};位域變量的說明與結構變量說明的方式相同。采用先定義后說明,同時定義說明或者直接說明這三種方式。例如:structbs{inta:8;intb:2;intc:6;}data;說明data為bs變量,共占兩個字節(jié)。其中位域a占8位,位域b占2位,位域c占6位。9.2位域對于位域的定義有以下幾點說明:1)一個位域必須存儲在同一個字節(jié)中,不能跨兩個字節(jié)。如一個字節(jié)所??臻g不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:structbs{unsigneda:4;unsigned:0;/*空域*/unsignedb:4;/*從下一單元開始存放*/unsignedc:4;}在這個位域定義中,a占第一字節(jié)的4位,后4位填0表示不使用,b從第二字節(jié)開始,占用4位,c占用4位。2)由于位域不允許跨兩個字節(jié),因此位域的長度不能大于一個字節(jié)的長度,也就是說不能超過8位二進位。3)位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:9.2位域structk{inta:1;int:2;/*該2位不能使用*/intb:3;intc:2;};4)位域的成員的類型是int型或者unsigned型。從以上分析可以看出,位域在本質上就是一種結構類型,不過其成員是按二進位分配的。位域的使用和結構成員的使用相同,其一般形式為:位域變量名·位域名位域允許用各種格式輸出。9.2位域例9.5位域程序舉例main(){structbs{unsigneda:1;unsignedb:3;unsignedc:4;}bit,*pbit;bit.a=1;bit.b=7;bit.c=15;printf("a=%d,b=%d,c=%d\n",bit.a,bit.b,bit.c);pbit=&bit;pbit->a=0;pbit->b&=3;pbit->c|=1;9.2位域上例程序中定義了位域結構bs,三個位域為a,b,c。說明了bs類型的變量bit和指向bs類型的指針變量pbit。這表示位域也是可以使用指針的。程序的9、10、11三行分別給三個位域賦值(應注意賦值不能超過該位域的允許范圍)。程序第12行以整型量格式輸出三個域的內容。第13行把位域變量bit的地址送給指針變量pbit。第14行用指針方式給位域a重新賦值,賦為0。第15行使用了復合的位運算符"&=",該行相當于:pbit->b=pbit->b&3位域b中原有值為7,與3作按位與運算的結果為3(111&011=011,十進制值為3)。同樣,程序第16行中使用了復合位運算"|=",相當于:pbit->c=pbit->c|1其結果為15。程序第17行用指針方式輸出了這三個域的值。printf("a=%d,b=%d,c=%d\n",pbit->a,pbit->b,pbit->c);}運行結果:
本章小結1.位運算是C語言的一種特殊運算功能,它是以二進制位為單位進行運算的。位運算符只有邏輯運算和移位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色建材采購與施工一體化服務合同4篇
- 2025年度美容院消防安全管理服務合同4篇
- 2025年老舊小區(qū)改造工程服務合同
- 二零二五年度離婚前財產分割專項合同4篇
- 二零二五年度古建筑泥工修繕工程承包合同8篇
- 2025年個人房產抵押貸款合同范本2篇
- 2025年度農藥產品安全評價與風險評估合同
- 2025年度個人名下房產出售合同范本2篇
- 課題申報參考:民國時期華東地區(qū)傳統(tǒng)體育史料搜集與輯錄研究
- 課題申報參考:面向能源結構轉型的摻氫天然氣負荷預測及其儲能布局優(yōu)化研究
- 2024年全國職業(yè)院校技能大賽高職組(研學旅行賽項)考試題庫(含答案)
- 2025年溫州市城發(fā)集團招聘筆試參考題庫含答案解析
- 2025年中小學春節(jié)安全教育主題班會課件
- 2025版高考物理復習知識清單
- 除數(shù)是兩位數(shù)的除法練習題(84道)
- 2025年度安全檢查計劃
- 2024年度工作總結與計劃標準版本(2篇)
- 全球半導體測試探針行業(yè)市場研究報告2024
- 反走私課件完整版本
- 2024年注冊計量師-一級注冊計量師考試近5年真題附答案
- 四年級下冊數(shù)學知識點總結
評論
0/150
提交評論