




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、枚舉、聯(lián)合、位域枚舉、聯(lián)合、位域Lesson 10Lesson 10程序設計基礎主要內容主要內容聯(lián)合聯(lián)合1枚舉枚舉2位域位域 32程序設計基礎 設有若干個人員的數(shù)據(jù),其中有學生和教師。學設有若干個人員的數(shù)據(jù),其中有學生和教師。學生的數(shù)據(jù)中包括:姓名、號碼、性別、職業(yè)、生的數(shù)據(jù)中包括:姓名、號碼、性別、職業(yè)、班級班級。教師的數(shù)據(jù)包括:姓名、號碼、性別、職業(yè)、教師的數(shù)據(jù)包括:姓名、號碼、性別、職業(yè)、職務職務。可以看出,學生和教師所包含的數(shù)據(jù)是不同的?,F(xiàn)要可以看出,學生和教師所包含的數(shù)據(jù)是不同的?,F(xiàn)要求把它們放在同一表格中求把它們放在同一表格中。聯(lián)合體聯(lián)合體 3程序設計基礎&構造數(shù)據(jù)類型構造
2、數(shù)據(jù)類型,也叫共用體也叫共用體&用途:使幾個不同類型的變量共占一段內存用途:使幾個不同類型的變量共占一段內存(相互覆蓋相互覆蓋)共用體類型定義共用體類型定義定義形式:定義形式:union 共用體名 類型標識符 成員名; 類型標識符 成員名; .;例 union data int i; char ch; float f; ;fchi類型定義不分配內存聯(lián)合體聯(lián)合體 程序設計基礎形式二: union data int i; char ch; float f; a,b;形式一: union data int i; char ch; float f; ; union data a,b,c,d3;
3、形式三: union int i; char ch; float f; a,b,c;fchifchiab共用體變量定義分配內存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時刻只有一個成員存在聯(lián)合體聯(lián)合體 程序設計基礎引用方式:例 a.i=1; a.ch=a; a.f=1.5; printf(“%d”,a.i); ( 編譯通過,運行結果不對) 引用規(guī)則不能引用共用體變量,只能引用其成員共用體變量名共用體變量名. .成員名成員名union data int i; char ch; float f; ;union data a,b,c,d3;a.i a.ch a.fd0.i d0.ch d0.f共用體變
4、量中起作用的成員是最后一次存放的成員例 union int i; 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; ( )例 union int i; char ch; float f; a=1; ( ) 聯(lián)合體聯(lián)合體 程序設計基礎結構體與聯(lián)合體區(qū)別
5、: 存儲方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbch k變量的各成員同時存在任一時刻只有一個成員存在聯(lián)系: 兩者可相互嵌套聯(lián)合體聯(lián)合體 程序設計基礎例 結構體中嵌套聯(lián)合體 struct int num; char name10; char sex; char job; union int class; char position10; category;person2;例 聯(lián)合體中嵌套結構體struct w_tag char low; char high;union u_tag struct w_t
6、ag byte_acc; int word_acc;u_acc;聯(lián)合體聯(lián)合體程序設計基礎主要內容主要內容聯(lián)合聯(lián)合1枚舉枚舉2位域位域 39程序設計基礎枚舉:枚舉:將變量的值一一列舉出來,變量的值只限于列舉將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內。出來的值的范圍內。申明枚舉類型用申明枚舉類型用enumenumenum weekdaysunenum weekdaysun,monmon,tuetue,wedwed,thuthu,frifri,sat;sat; 定義變量:定義變量:enum weekday workday;enum weekday workday;workdaywor
7、kday變量值只能是變量值只能是sunsun到到satsat之一之一 枚舉類型枚舉類型10程序設計基礎 枚舉類型的變量定義枚舉類型的變量定義enum weekdaysun,mou,tue,wed,thu,fri,sat ;enum weekday a,b,c;或者為:或者為:enum weekday sun,mou,tue,wed,thu,fri,sat a,b,c;或者為:或者為:enum sun,mou,tue,wed,thu,fri,sata,b,c;11程序設計基礎 枚舉類型的使用枚舉類型的使用在編譯中,對枚舉元素按常量處理,故在編譯中,對枚舉元素按常量處理,故稱枚舉常量。它們不是變量
8、,不能對它們稱枚舉常量。它們不是變量,不能對它們賦值。賦值。 枚舉元素作為常量,它們是有值的,語枚舉元素作為常量,它們是有值的,語言編譯按定義時的順序使它們的值為,言編譯按定義時的順序使它們的值為, 12程序設計基礎 枚舉類型的使用示例枚舉類型的使用示例13 enum weekday sun,mon,tue,wed,thu,fri,sat a,b,c; main() a=sun; b=mon; c=tue; printf(%d,%d,%d,a,b,c);程序設計基礎主要內容主要內容聯(lián)合聯(lián)合1枚舉枚舉2位域位域 314程序設計基礎位運算符和位運算位運算符和位運算運算符運算符 含義含義 運算符運算
9、符 含義含義 按位與按位與 取反取反 | | 按位或按位或 右移右移(1)(1)位運算符中除以外,均為二目(元)運算符,位運算符中除以外,均為二目(元)運算符,即要求兩側各有一個運算量。即要求兩側各有一個運算量。(2)(2)運算量只能是整型或字符型的數(shù)據(jù),不能為實型運算量只能是整型或字符型的數(shù)據(jù),不能為實型數(shù)據(jù)。數(shù)據(jù)。語言提供的位運算符有:語言提供的位運算符有: 15程序設計基礎 “按位與按位與”運算符()運算符()按位與是指:按位與是指:參加運算的兩個數(shù)據(jù),按二進制位進行參加運算的兩個數(shù)據(jù),按二進制位進行“與與”運算。如果兩個相應的二進制位都為,則運算。如果兩個相應的二進制位都為,則該位的結
10、果值為;否則為。即:該位的結果值為;否則為。即:,例:例:注意:注意:如果參加&運算的是負數(shù)(如-3&-5),則要以補碼形式表示為二進制數(shù),然后再按位進行“與”運算。 00000011(3)& & 00000101(5) 00000001(1) 3&5的值得16程序設計基礎“按位與按位與”運算符()運算符() 若想對一個存儲單元清零,即使其全部二進制位若想對一個存儲單元清零,即使其全部二進制位為,只要找一個二進制數(shù),其中各個位符合以下為,只要找一個二進制數(shù),其中各個位符合以下條件:條件:原來的數(shù)中為的位,新數(shù)中相應位為。原來的數(shù)中為的位,新數(shù)中相應位為。
11、然后使二者進行運算,即可達到清零目的。然后使二者進行運算,即可達到清零目的。應用(應用(1):清零):清零 17應用應用(2 2):取一個數(shù)中某些指定位):取一個數(shù)中某些指定位 如有一個整數(shù)(個字節(jié)),想要取其中的低如有一個整數(shù)(個字節(jié)),想要取其中的低字節(jié),只需將與字節(jié),只需將與8 8個個1 1按位與即可。按位與即可。 應用應用(3 3):保留一位的方法:與一個數(shù)進行運):保留一位的方法:與一個數(shù)進行運算,此數(shù)在該位取。算,此數(shù)在該位取。程序設計基礎 “ “按位或按位或”運算符(運算符(| |)兩個相應的二進制位中只要有一個為,該位的結兩個相應的二進制位中只要有一個為,該位的結果值為。果值為
12、。即即 | |,| |,| |,| |例:例: 060|017,060|017,將八進制數(shù)將八進制數(shù)6060與八進制數(shù)與八進制數(shù)1717進行進行按位或運算。按位或運算。 00110000| 00001111 00111111 18程序設計基礎應用:按位或運算常用來對一個數(shù)據(jù)的某些位定應用:按位或運算常用來對一個數(shù)據(jù)的某些位定值為。值為。例如:如果想使一個數(shù)的低位改為,只需例如:如果想使一個數(shù)的低位改為,只需將與進行按位或運算即可。將與進行按位或運算即可。19 “ “按位或按位或”運算符(運算符(| |)程序設計基礎“異或異或”運算符(運算符()異或運算符異或運算符也稱也稱XORXOR運算符。它
13、的規(guī)則是:運算符。它的規(guī)則是:若參加運算的兩個二進制位同號則結果為(假)若參加運算的兩個二進制位同號則結果為(假) 異號則結果為(真)異號則結果為(真)即:00=0,01=1,10=1, 11=0即即: 071052=023 : 071052=023 (八進制數(shù))(八進制數(shù)) 00111001 00101010 00010011 例:例:20程序設計基礎應用(應用(1 1):使特定位翻轉):使特定位翻轉 設有,想使其低位翻轉,即設有,想使其低位翻轉,即變?yōu)椋優(yōu)?。可以將它與變?yōu)?,變?yōu)?。可以將它與進行進行運算。運算。21“異或異或”運算符(運算符()應用(應用(2 2):):交換兩個值,不用臨時
14、變量例如:,。例如:,。想將和的值互換,可以用以下賦值語句實現(xiàn):想將和的值互換,可以用以下賦值語句實現(xiàn):ab;ab;ba;ba;ab;ab; () (ab的結果,a已變成)() (ba的結果,b已變成)() (ab的結果,a已變成)程序設計基礎 “ “取反取反”運算符()運算符() 是一個單目(元)運算符,用來對一個二是一個單目(元)運算符,用來對一個二進制數(shù)按位取反,即將變,將變。例如進制數(shù)按位取反,即將變,將變。例如,是對八進制數(shù)(即二進制數(shù),是對八進制數(shù)(即二進制數(shù))按位求反。)按位求反。 0000000000010101() 1111111111101010 (八進制數(shù)八進制數(shù)1777
15、52)177752)22程序設計基礎左移運算符()左移運算符() 左移運算符是用來將一個數(shù)的各二進制左移運算符是用來將一個數(shù)的各二進制位全部左移若干位。位全部左移若干位。 例如:例如:a=a2 a=a) 右移運算符是右移運算符是a2a2表示將表示將a a的各二進制的各二進制位右移位右移2 2位,移到右端的低位被舍棄位,移到右端的低位被舍棄, ,對無符對無符號數(shù)號數(shù), ,高位補高位補0 0。例如:例如:a=015a=015時,時,a a的值用二進制形式表示為的值用二進制形式表示為0000111100001111,舍棄低,舍棄低2 2位位1111:a2=00000011a2=00000011右移一
16、位相當于除以右移一位相當于除以2 2 右移右移n n位相當于除以位相當于除以2n2n。 24程序設計基礎在右移時在右移時, ,需要注意符號位問題:需要注意符號位問題: 對無符號數(shù)對無符號數(shù), ,右移時左邊高位移入右移時左邊高位移入0 0;對;對于有符號的值于有符號的值, ,如果原來符號位為如果原來符號位為0(0(該數(shù)為正該數(shù)為正),),則右邊也是移入則右邊也是移入0 0。如果符號位原來為。如果符號位原來為1(1(即負即負數(shù)數(shù)),),則右邊移入則右邊移入0 0還是還是1,1,要取決于所用的計算要取決于所用的計算機系統(tǒng)。有的系統(tǒng)移入機系統(tǒng)。有的系統(tǒng)移入0,0,有的系統(tǒng)移入有的系統(tǒng)移入1 1。移。移
17、入入0 0的稱為的稱為“邏輯右移邏輯右移”, ,即簡單右移;移入即簡單右移;移入1 1的稱為的稱為“算術右移算術右移”。 右移運算符(右移運算符()25程序設計基礎例:例:a a的值是八進制數(shù)的值是八進制數(shù)113755113755: a: 1001011111101101 a: 1001011111101101 (用二進制形式表示(用二進制形式表示)a1: 0100101111110110 (a1: 0100101111110110 (邏輯右移時邏輯右移時) )a1: 1100101111110110 (a1: 1100101111110110 (算術右移時算術右移時) ) 在有些系統(tǒng)中在有些
18、系統(tǒng)中,a1,a1得八進制數(shù)得八進制數(shù)045766,045766,而在而在另一些系統(tǒng)上可能得到的是另一些系統(tǒng)上可能得到的是145766145766。Turbo CTurbo C和其和其他一些他一些C C編譯采用的是算術右移編譯采用的是算術右移, ,即對有符號數(shù)右即對有符號數(shù)右移時移時, ,如果符號位原來為如果符號位原來為1 1,左面移入高位的是,左面移入高位的是1 1。右移運算符(右移運算符()26程序設計基礎位運算賦值運算符位運算賦值運算符 位運算符與賦值運算符可以組成復合賦值運算符。位運算符與賦值運算符可以組成復合賦值運算符。 例如例如: &=, |=, =, =, =, =例:
19、a & = b相當于 a = a & b a =2相當于a = a 2賦值運算符賦值運算符27程序設計基礎不同長度的數(shù)據(jù)進行位運算不同長度的數(shù)據(jù)進行位運算 如果兩個數(shù)據(jù)長度不同,進行位運算時如果兩個數(shù)據(jù)長度不同,進行位運算時( (如如a & b,a & b,而而a a為為longlong型型,b,b為為intint型型),),系統(tǒng)會將系統(tǒng)會將二者按右端對齊。如果二者按右端對齊。如果b b為正數(shù)為正數(shù), ,則左側則左側1616位位補滿補滿0 0;若;若b b為負數(shù)為負數(shù), ,左端應補滿左端應補滿1 1;如果;如果b b為無為無符號整數(shù)型符號整數(shù)型, ,則左側添滿則
20、左側添滿0 0。28程序設計基礎位段位段( (位域位域) ) 信息的存取一般以字節(jié)為單位。實際上,有時信息的存取一般以字節(jié)為單位。實際上,有時存儲一個信息不必用一個或多個字節(jié),例如,存儲一個信息不必用一個或多個字節(jié),例如,“真真”或或“假假”用或表示,只需位即可。在計算機用或表示,只需位即可。在計算機用于過程控制、參數(shù)檢測或數(shù)據(jù)通信領域時,控制用于過程控制、參數(shù)檢測或數(shù)據(jù)通信領域時,控制信息往往只占一個字節(jié)中的一個或幾個二進制位,信息往往只占一個字節(jié)中的一個或幾個二進制位,常常在一個字節(jié)中放幾個信息。常常在一個字節(jié)中放幾個信息。29怎樣向一個字節(jié)中的一個或幾個二進制位怎樣向一個字節(jié)中的一個或幾
21、個二進制位賦值和改變它的值呢?賦值和改變它的值呢?程序設計基礎C C 語言允許在一個結構體中以位為單位來指定語言允許在一個結構體中以位為單位來指定其成員所占內存長度,這種以位為單位的成員其成員所占內存長度,這種以位為單位的成員稱為稱為“位段位段”或稱或稱“位域位域” ( bit field) ( bit field) 。利用位段能夠用較少的位數(shù)存儲數(shù)據(jù)。利用位段能夠用較少的位數(shù)存儲數(shù)據(jù)。 位段位段( (位域位域) )30程序如下:struct packed-data unsigned :; unsigned:; unsigned:; unsigned:; int ; data; 程序設計基礎位段位段( (位域位域) )結構類型中,可含有若干個(甚至全部)位域,結構類型中,可含有若干個(甚至全部)位域,位域的定義形式為:位域的定義形式為: 類型名類型名 位域名位域名: 域長域長; 示例: 定義存儲工作人員信息的結構含有普通域:姓名(name)、年齡(age)、 住址(addr結構類型)、應支付的工資(pay)位域(只占一位):該員是否已退休( state )、 工資是否已發(fā)放(payo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資者關系管理與財務溝通
- 技術創(chuàng)新與公共服務領域的結合點
- 提升物業(yè)保潔工作效率的方法
- 持續(xù)創(chuàng)新的企業(yè)品牌發(fā)展模式
- 技術創(chuàng)新與市場競爭力提升之道
- 拼多多的國際市場定位與戰(zhàn)略選擇
- 呂梁學院《麻醉拔牙及齒槽外科學》2023-2024學年第一學期期末試卷
- 鄂州職業(yè)大學《生理學實踐學識》2023-2024學年第一學期期末試卷
- 教學設計中的學生情感教育體驗
- 廣告投放策略分析
- 漿料回收工藝及流程
- QSY 1643-2013安全目視化管理導則培訓課件
- 人教版高中數(shù)學選修2-3全部教案
- 學校中層干部選拔考試教育教學管理知識試題題庫(包含:名詞解釋、簡答題、論述題、案例分析)
- 港口規(guī)劃與布置課程設計
- GB/T 799-2020地腳螺栓
- GB/T 213-2003煤的發(fā)熱量測定方法
- GB/T 19411-2003除濕機
- GB/T 15683-2008大米直鏈淀粉含量的測定
- 幼兒園大班畢業(yè)典禮教師詩朗誦
- 【部編人教版】貴州省銅仁市2021-2022年八年級下期末數(shù)學試卷
評論
0/150
提交評論