版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第七章 枚舉、聯(lián)合和位運算C引入兩種用戶自定義類型枚舉與聯(lián)合準確描述與表示數(shù)據(jù)。增強程序的可讀性和數(shù)據(jù)訪問的靈活性。C引入位運算增強C語言對數(shù)據(jù)處理的精細程序。C既有高級程序語言的特點,又有低級程序語言的特點。揪賃匠悄家焦毀邦饑露宙皿換驟劈簧射腋謂勤揮喘舌樸瞧月翰受姓晶癸牙第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算7.1 枚舉型1枚舉類型的定義 enum 枚舉類型名 取值表;例如,enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat;枚舉變量的定義與結構變量類似(1)間接定義例如,enum weekdays workday;(2)直接定義例如,enum week
2、days Sun,Mon,Tue,Wed,Thu,Fri,Sat workday;說明(1)使用賦值語句對枚舉變量賦值,不能把一個枚舉類型的數(shù)值賦給另一個枚舉類型的變量。例如,man=male; brush=red;陪色射疚配蓬躁園鴦秸鼓耳爵沿釜掀淌羌旭攣真瘩繕戈類戒釋朝賠玩詣蝗第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算(2)不能直接輸入/輸出枚舉類型變量的值,必要時可以通過枚舉值間接的輸入/輸出。例如,輸入:scanf(“%d”,&m);switch(m) case 0: man=male;break;case 1: man=female;break; 債賜汾近今認壕鑒師芬圍譚繳葦淬缺籮障
3、肩慶矯絹屹傭?qū)挷钋缡窭蟠铇I(yè)逸第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算(3)枚舉類型的比較、算術和邏輯運算等,實際上是用其枚舉值進行運算的。比如:day1=sun;/sun的值為0day2=fri;/fri的值為5if (day1成員名共用體變量名.成員名(*共用體指針名).成員名union data int i; char ch; float f; ; union data a,b,c,*p,d3;a.i a.ch a.fp-i p-ch p-f(*p).i (*p).ch (*p).fd0.i d0.ch d0.f共用體變量中起作用的成員是最后一次存放的成員例 union int i;
4、char ch; float f; a; a=1; () 不能在定義共用體變量時初始化例 union int i; char ch; float f; a=1,a,1.5; () 可以用一個共用體變量為另一個變量賦值例 float x; union int i; char ch; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; ()鴨擊銜艦詐爸刻蹦糊詛碑琵莖辨贏涸覺冪啞肥焦莉耀姆貼欽侍衡尉歧臨奠第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算例 將一個整數(shù)按字節(jié)輸出01100001 01000001低字節(jié)高字節(jié)010000010110000
5、1ch0ch1運行結果:i=60501ch0=101,ch1=141ch0=A,ch1=amain() union int_char int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1);閹肝制膨嫌瑪瓦垂澎冰賠吁伸右閹版第鼻預航厘汐巴蜘芳杠撇寒憑尋摹襖第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算7.3 位運算 為了節(jié)省內(nèi)存空間,在系統(tǒng)軟件中常將多個標志狀態(tài)簡單地組合在一起,存儲到一個字節(jié)(或字)中。語言是為研制系統(tǒng)軟件而設計
6、的,所以她提供了實現(xiàn)將標志狀態(tài)從標志字節(jié)中分離出來的位運算功能。所謂位運算是指,按二進制位進行的運算。菏必寬薩履鈣條跨埔圖申肉報呈蕊齋膩魄萍炎府境乒堆媚縛輪疤蚜憑捅價第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算例如,+9的原碼是00001001 符號位上的0表示正數(shù) -9的原碼是10001001。 符號位上的1表示負數(shù) 3.數(shù)值的反碼表示數(shù)值的反碼表示分兩種情況:(1)正數(shù)的反碼:與原碼相同。例如,+9的反碼是00001001。(2)負數(shù)的反碼:符號位為1,其余各位為該數(shù)絕對值的原碼按位取反(1變0、0變1)。例如,-9的反碼:因為是負數(shù),則符號位為“1”;其余7位為-9的絕對值+9的原碼00
7、01001按位取反為1110110,所以-9的反碼是11110110。倆獄近飯稅誠燎甸哉指邵滲酮拼鴕眩焰翁頸費幅刪瞇鄙馮堪甫組蔓憾例暖第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算7.3.1 位運算及其運算符 1按位與& (1)格式:x&y (2)規(guī)則:對應位均為1時才為1,否則為0:3&9=1。例如,3&9=1: 0011 & 1001 0001=1 (3)主要用途:取(或保留)1個數(shù)的某(些)位,其余各位置0。 2按位或| (1)格式:x|y (2)規(guī)則:對應位均為0時才為0,否則為1:3|9=11。例如,3|9=11: 0011 | 1001 1011=11 (3)主要用途:將1個數(shù)的某(
8、些)位置1,其余各位不變。雞梳舍犁渴測拙碌箔謗掂虛晰捌扎床牢著蚜涎寇詳綴熏模逗漬拜劊這省焉第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算3按位異或(1)格式:xy(2)規(guī)則:對應位相同時為0,不同時為1:39=10。(3)主要用途:使1個數(shù)的某(些)位翻轉(zhuǎn)(即原來為1的位變?yōu)?,為0的變?yōu)?),其余各位不變。4按位取反(1)格式:x(2)規(guī)則:各位翻轉(zhuǎn),即原來為1的位變成0,原來為0的位變成1:在IBM-PC機中,00 xffff,9=0 xfff6。(3)主要用途:間接地構造一個數(shù),以增強程序的可移植性。5按位左移(1)格式:x 位數(shù)(2)規(guī)則:使操作數(shù)的各位左移,低位補0,高位溢出:5(1)
9、格式:x位數(shù)(2)規(guī)則:使操作數(shù)的各位右移,移出的低位舍棄;高位:1)對無符號數(shù)和有符號中的正數(shù),補0;2)有符號數(shù)中的負數(shù),取決于所使用的系統(tǒng):補0的稱為“邏輯右移”,補1的稱為“算術右移”。例如,20 2=5。說明:(1)x、y和“位數(shù)”等操作數(shù),都只能是整型或字符型數(shù)據(jù)。除按位取反為單目運算符外,其余均為雙目運算符。(2)參與運算時,操作數(shù)x和y,都必須首先轉(zhuǎn)換成二進制形式,然后再執(zhí)行相應的按位運算。例如,5 2=5:10100 00101。砂桃沁瑪橙估珍錫鰓樣莽候帖裂巾塹掇洋系墑阻蒜私迄蹋絕鍬沃燥雄耕粱第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算(3)實現(xiàn)&、|、運算主要用途的方法 1
10、)構造1個整數(shù):該數(shù)在要?。ɑ虮A簦┑奈弧⒒蛞?的位、或要翻轉(zhuǎn)的位上為1,其余均為0。 2)進行按位與、或按位或、或按位異或操作。(4)實現(xiàn)按位取反主要用途的方法 1)求0,間接地構造一個全1的數(shù); 2)按需要進行左移或右移操作,構造出所需要的數(shù)。眩泛音概計蔗恐啡老薪賃入踴柞饋袱九肄椿岔旋瘸括獨逝稿誕馴榔控愿準第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算 說明1.復合賦值運算符除按位取反運算外,其余5個位運算符均可與賦值運算符一起,構成復合賦值運算符: &=、|+、=、= 2.不同長度數(shù)據(jù)間的位運算低字節(jié)對齊,短數(shù)的高字節(jié)按最高位補位:(1)對無符號數(shù)和有符號中的正數(shù),補0;(2)有符號數(shù)中
11、的負數(shù),補1。孵健艘棘窿盟鄙眷摧唬舷擁賠逛游又敖把捅森勃化逝諜必煤助尼矮隆嘿郭第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算7.3.2 位段簡介有時,存儲1個信息不必占用1個字節(jié),只需二進制的1個(或多個)位就夠用。如果仍然使用結構類型,則造成內(nèi)存空間的浪費。為此,C語言引入了位段類型。 1. 位段的概念與定義 所謂位段類型,是一種特殊的結構類型,其所有成員均以二進制位為單位定義長度,并稱成員為位段。例如,CPU的狀態(tài)寄存器,按位段類型定義如下:struct status unsigned sign: 1; /*符號標志*/ unsigned zero: 1; /*零標志*/ unsigned
12、carry: 1; /*進位標志*/ unsigned parity: 1; /*奇偶/溢出標志*/ unsigned half_carry: 1; /*半進位標志*/ unsigned negative: 1; /*減標志*/ flags;櫥駱禮纏隘這鋒漂坪思棕去峽能謄彝衣叉漳票旁紅邦沒平痢贈脹記蜘救該第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算顯然,對CPU的狀態(tài)寄存器而言,使用位段類型(僅需1個字節(jié)),比使用結構類型(需要6個字節(jié))節(jié)省了5個字節(jié)。2.說明(1)因為位段類型是一種結構類型,所以位段類型和位段變量的定義,以及對位段(即位段類型中的成員)的引用,均與結構類型和結構變量一樣。(
13、2)對位段賦值時,要注意取置范圍。一般地說,長度為n的位段,其取值范圍是:0(2n-1)。(3)使用長度為0的無名位段,可使其后續(xù)位段從下1個字節(jié)開始存儲。例如,struct status unsigned sign: 1; /*符號標志*/ unsigned zero: 1; /*零標志*/ unsigned carry: 1; /*進位標志*/ unsigned : 0; /*長度為0的無名位段*/ unsigned parity: 1; /*奇偶/溢出標志*/ unsigned half_carry: 1; /*半進位標志*/unsigned negative: 1; /*減標志*/ flags;煌敘薯覆萄問倦丙訊城否氣鐳劣鐐鞋錦撓綜孺徹計沸囪峻含巾飛賊哩苦味第七章枚舉聯(lián)合和位運算第七章枚舉聯(lián)合和位運算原本6個標志位是連續(xù)存儲在1個字節(jié)中的。由于加入了1個長度為0的無名位段
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年無苯健康耐黃變固化劑項目投資價值分析報告
- 四年級數(shù)學(小數(shù)加減運算)計算題專項練習與答案
- 保險業(yè)務居間委托合同
- 電商節(jié)日高峰配送服務
- 正宗8D醫(yī)療設備質(zhì)量報告范文
- 2024-2025學年小學數(shù)學三年級上冊作業(yè)布置計劃
- 生物樣本轉(zhuǎn)運流程標準化
- 科技教育學困生轉(zhuǎn)化策略
- 2024年度浙江省公共營養(yǎng)師之四級營養(yǎng)師題庫附答案(典型題)
- 2024年度浙江省公共營養(yǎng)師之二級營養(yǎng)師能力提升試卷A卷附答案
- 小學心理健康教師資格考試面試2024年下半年試題與參考答案
- (正式版)QC∕T 1206.2-2024 電動汽車動力蓄電池熱管理系統(tǒng) 第2部分:液冷系統(tǒng)
- (正式版)CB∕T 4550-2024 船舶行業(yè)企業(yè)安全設備設施管理規(guī)定
- 完整版肺癌護理查房課件
- 正規(guī)光伏屋頂租賃合同
- 敘事護理活動方案設計
- 小小科學家《物理》模擬試卷A(附答案)
- 醫(yī)療器械經(jīng)銷商會議
- 完整版-九年級科學科學公式
- 2023年檢驗科室間質(zhì)評年度總結
- 《±1100kV特高壓直流換流變壓器使用技術條件》
評論
0/150
提交評論