版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、例如:例如:union data union data int i; int i; char ch; 或或 char ch; float f; float f;a,b,c; ;union data a,b,c;共用體和結(jié)構(gòu)體的比較:共用體和結(jié)構(gòu)體的比較: 結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個成員分別占有其自己的內(nèi)存單元。 共用體變量所占的內(nèi)存長度等于最長的成員的長度。 共用體和結(jié)構(gòu)體的比較:共用體和結(jié)構(gòu)體的比較: 結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個成員分別占有其自己的內(nèi)存單元。 共用體變量所占的內(nèi)存長度等于最長的成員的長度。 例如例如: :上面定義的“共用體”
2、變量、各占個字節(jié)(因?yàn)橐粋€實(shí)型變量占個字節(jié)),而不是各占個字節(jié)。 共用體變量的引用方式共用體變量的引用方式 只有先定義了共用體變量才能引用它,而且不能引用共用體變量,而只能引用共用體變量中的成員。例如例如:前面定義了前面定義了a、b、c為共用體變量為共用體變量 a.i (引用共用體變量中的整型變量) a.ch(引用共用體變量中的字符變量) a.f (引用共用體變量中的實(shí)型變量) 共用體類型數(shù)據(jù)的特點(diǎn)共用體類型數(shù)據(jù)的特點(diǎn)(1)同一個內(nèi)存段可以用來存放幾種不同類型的成員,但在每一瞬時只能存放其中一種,而不是同時存放幾種。(2) 共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后原有
3、的成員就失去作用。 (3) 共用體變量的地址和它的各成員的地址都是同一地址。 (4) 不能對共用體變量名賦值,也不能企圖引用變量名來得到一個值,又不能在定義共用體變量時對它初始化。(5) 不能把共用體變量作為函數(shù)參數(shù),也不能使函數(shù)帶回共用體變量,但可以使用指向共用體變量的指針 (6) 共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共用體數(shù)組。反之,結(jié)構(gòu)體也可以出現(xiàn)在共用體類型定義中,數(shù)組也可以作為共用體的成員。例例: :設(shè)有若干個人員的數(shù)據(jù),其中有學(xué)生和教師。學(xué)生的數(shù)據(jù)中包括:姓名、號碼、性別、職業(yè)、班級。教師的數(shù)據(jù)包括:姓名、號碼、性別、職業(yè)、職務(wù)。可以看出,學(xué)生和教師所包含的數(shù)據(jù)是不同的
4、?,F(xiàn)要求把它們放在同一表格中。圖11-25算法: #include structint num;char name10;char sex;char job;unionint banji;char position10;category;person2;/*先設(shè)人數(shù)為2*/void main()int i;for(i=0;i2;i+)scanf(%d %s %c %c, &personi.num, &,&personi.sex, &personi.job);if(personi.job = S)scanf(%d, &personi.
5、category.banji);else if(personi.job = T)scanf(%s, personi.category.position);else printf(“Input error!”); printf(n);printf(No. name sex job class/positionn);for(i=0;i2;i+)if (personi.job = S)printf(“%-6d%-10s%-3c%-3c%-6dn”,personi.num, , personi.sex, personi.job, personi.category.banji);
6、else printf(“%-6d%-10s%-3c%-3c%-6sn”,personi.num, ,personi.sex, personi.job, personi.category.position);運(yùn)行情況如下:運(yùn)行情況如下: 用用typedeftypedef定義類型定義類型用typedef聲明新的類型名來代替已有的類型名聲明INTEGER為整型typedef int INTEGER聲明結(jié)構(gòu)類型Typedef struct int month; int day; int year;DATE; 用用typedeftypedef定義類型定義類型聲明為整型數(shù)組類型
7、; 聲明為字符指針類型 typedef char *STRING; 聲明POINTER為指向函數(shù)的指針類型,該函數(shù)返回整型值 typedef int (*POINTER)() 用用typedeftypedef定義類型定義類型用typedef定義類型的方法 先按定義變量的方法寫出定義體(如:int i)。 將變量名換成新類型名(例如:將i換成COUNT)。 在最前面加 (例如:typedef int COUNT)。 然后可以用新類型名去定義變量。 用用typedeftypedef定義類型定義類型用typedef定義類型的方法(舉例) 先按定義數(shù)組變量形式書寫:int n100; 將變量名換成自己
8、指定的類型名: intNUM0; 在前面加上typedef,得到 typedef int NUM; 用來定義變量:NUM;用用typedeftypedef定義類型定義類型說明:(1)用typedef可以聲明各種類型名,但不能用來定義變量。(2) 用typedef只是對已經(jīng)存在的類型增加一個類型名,而沒有創(chuàng)造新的類型。 (3) 當(dāng)不同源文件中用到同一類型數(shù)據(jù)時,常用typedef聲明一些數(shù)據(jù)類型,把它們單獨(dú)放在一個文件中,然后在需要用到它們的文件中用#include命令把它們包含進(jìn)來。(4) 使用typedef有利于程序的通用與移植。用用typedeftypedef定義類型定義類型說明:(5)
9、typedef與#define有相似之處,例如:typedef int COUNT;#define COUNT int的作用都是用COUNT代表int。但事實(shí)上,它們二者是不同的。#define是在預(yù)編譯時處理的,它只能作簡單的字符串替換,而typedef是在編譯時處理的。實(shí)際上它并不是作簡單的字符串替換,而是采用如同定義變量的方法那樣來聲明一個類型1 1位運(yùn)算符和位運(yùn)算位運(yùn)算符和位運(yùn)算2 2位運(yùn)算舉例位運(yùn)算舉例3 3位段位段l 位運(yùn)算是指按二進(jìn)制位進(jìn)行的運(yùn)算。因?yàn)樵谙到y(tǒng)軟件中,常要處理二進(jìn)制位的問題。l 例如:將一個存儲單元中的各二進(jìn)制位左移或右移一位,兩個數(shù)按位相加等。l 語言提供位運(yùn)算的
10、功能,與其他高級語言(如PASCAL)相比,具有很大的優(yōu)越性。運(yùn)算符 含義 運(yùn)算符 含義 按位與 取反 | 按位或 右移(1)位運(yùn)算符中除以外,均為二目(元)運(yùn)算符,即要求兩側(cè)各有一個運(yùn)算量。(2)運(yùn)算量只能是整型或字符型的數(shù)據(jù),不能為實(shí)型數(shù)據(jù)。語言提供的位運(yùn)算符有: 按位與是指:參加運(yùn)算的兩個數(shù)據(jù),按二進(jìn)制位進(jìn)行“與”運(yùn)算。如果兩個相應(yīng)的二進(jìn)制位都為,則該位的結(jié)果值為;否則為。即:,例:例:并不等于,應(yīng)該是按位與運(yùn)算:注意:注意:如果參加&運(yùn)算的是負(fù)數(shù)(如-3&-5),則要以補(bǔ)碼形式表示為二進(jìn)制數(shù),然后再按位進(jìn)行“與”運(yùn)算。 00000011(3)& & 00
11、000101(5) 00000001(1) 3&5的值得 若想對一個存儲單元清零,即使其全部二進(jìn)制位為,只要找一個二進(jìn)制數(shù),其中各個位符合以下條件:原來的數(shù)中為的位,新數(shù)中相應(yīng)位為。然后使二者進(jìn)行運(yùn)算,即可達(dá)到清零目的。(1) 清零 例:例: 原有數(shù)為,另找一個數(shù),設(shè)它為,這樣在原數(shù)為的位置上,該數(shù)的相應(yīng)位值均為。將這兩個數(shù)進(jìn)行運(yùn)算: 00101011& & 10010100 00000000 (2) 取一個數(shù)中某些指定位 如有一個整數(shù)(個字節(jié)),想要取其中的低字節(jié),只需將與8個1按位與即可。 0 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0abc0 0
12、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 0 (3)保留一位的方法:與一個數(shù)進(jìn)行運(yùn)算,此數(shù)在該位取。即:a=84,b=59 c=a&b=16例:例:有一數(shù),想把其中左面第、位保留下來,運(yùn)算如下: 01010100(84)& & 00111011(59) 00010000(16) 兩個相應(yīng)的二進(jìn)制位中只要有一個為,該位的結(jié)果值為。即 |,|,|,|例:例: 060|017,將八進(jìn)制數(shù)60與八進(jìn)制數(shù)17進(jìn)行按位或運(yùn)算。 00110000| 00001111 00111111 應(yīng)用:按位或運(yùn)算常用來對一個
13、數(shù)據(jù)的某些位定值為。例如:如果想使一個數(shù)的低位改為,只需將與進(jìn)行按位或運(yùn)算即可。 異或運(yùn)算符也稱XOR運(yùn)算符。它的規(guī)則是:若參加運(yùn)算的兩個二進(jìn)制位同號則結(jié)果為(假) 異號則結(jié)果為(真)即:00=0,01=1,10=1, 11=0即即:071052=023 :071052=023 (八進(jìn)制數(shù))(八進(jìn)制數(shù)) 00111001 00101010 00010011 例:例:()() 使特定位翻轉(zhuǎn)使特定位翻轉(zhuǎn)設(shè)有,想使其低位翻轉(zhuǎn),即變?yōu)?,變?yōu)?。可以將它與進(jìn)行運(yùn)算,即:運(yùn)算符應(yīng)用: 01111010 00001111 01110101 運(yùn)算結(jié)果的低位正好是原數(shù)低位的翻轉(zhuǎn)??梢?,要使哪幾位翻轉(zhuǎn)就將與其進(jìn)行運(yùn)
14、算的該幾位置為即可。因?yàn)樵瓟?shù)中的與進(jìn)行運(yùn)算得,得,故保留原數(shù)。例如:01200=012()() 與相與相,保留原值,保留原值 00001010 00000000 00001010() 交換兩個值,不用臨時變量例如:,。想將和的值互換,可以用以下賦值語句實(shí)現(xiàn):ab;ba;ab; () (ab的結(jié)果,a已變成)() (ba的結(jié)果,b已變成)() (ab的結(jié)果,a已變成) 執(zhí)行前兩個賦值語句:“;”和“;”相當(dāng)于b=b(ab)。 再執(zhí)行第三個賦值語句: 。由于a的值等于(),b的值等于(),因此,相當(dāng)于a=,即a的值等于,等于。 得到原來的值。即等效于以下兩步: 是一個單目(元)運(yùn)算符,用來對一個二
15、進(jìn)制數(shù)按位取反,即將變,將變。例如,是對八進(jìn)制數(shù)(即二進(jìn)制數(shù))按位求反。 0000000000010101() 1111111111101010 (八進(jìn)制數(shù)八進(jìn)制數(shù)177752)177752) 左移運(yùn)算符是用來將一個數(shù)的各二進(jìn)制位全部左移若干位。 例如:a=2表示將a的各二進(jìn)制位右移2位,移到右端的低位被舍棄,對無符號數(shù),高位補(bǔ)0。例如: a=017時: a的值用二進(jìn)制形式表示為00001111, 舍棄低2位11: a2=00000011右移一位相當(dāng)于除以右移一位相當(dāng)于除以2 2 右移右移n n位相當(dāng)于除以位相當(dāng)于除以2n2n。 在右移時,需要注意符號位問題: 對無符號數(shù),右移時左邊高位移入0
16、;對于有符號的值,如果原來符號位為0(該數(shù)為正),則左邊也是移入0。如果符號位原來為1(即負(fù)數(shù)),則左邊移入0還是1,要取決于所用的計(jì)算機(jī)系統(tǒng)。有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯右移”,即簡單右移;移入1的稱為“算術(shù)右移”。 例:例: a的值是八進(jìn)制數(shù)113755: a:1001011111101101 (用二進(jìn)制形式表示)a1: 0100101111110110 (邏輯右移時)a1: 1100101111110110 (算術(shù)右移時) 在有些系統(tǒng)中,a1得八進(jìn)制數(shù)045766,而在另一些系統(tǒng)上可能得到的是145766。Turbo C和其他一些C編譯采用的是算術(shù)右移,即對有符號數(shù)
17、右移時,如果符號位原來為1,左面移入高位的是1。位位運(yùn)算賦值運(yùn)算符運(yùn)算賦值運(yùn)算符 位運(yùn)算符與賦值運(yùn)算符可以組成復(fù)合賦值運(yùn)算符。 例如: &=, |=, =, =, =例: a & = b相當(dāng)于 a = a & b a =2相當(dāng)于a = a 4 目的是使要取出的那幾位移到最右端 未右移時的情況 右移4位后的情況 設(shè)置一個低4位全為1,其余全為0的數(shù)。 ( 0 4) & ( 0 4 )程序如下:#include void main() unsigned a,b,c,d; scanf(“%o”,&a); b=a4; c=(04); d=b&c; pri
18、ntf(“%o,%dn%o,%dn”,a,a,d,d);運(yùn)行情況如下:(輸入), 217 (的值), 13 (的值) 輸入的值為八進(jìn)制數(shù)331, 其二進(jìn)制形式為11011001 經(jīng)運(yùn)算最后得到的d為00001101 即八進(jìn)制數(shù),十進(jìn)制數(shù)13。例: 循環(huán)移位要求將進(jìn)行右循環(huán)移位 將右循環(huán)移位,即將中原來左面()位右移位,原來右端位移到最左面位。 將的右端位先放到中的高位中,實(shí)現(xiàn)語句:(); 將右移位,其左面高位位補(bǔ),實(shí)現(xiàn)語句:; 將與進(jìn)行按位或運(yùn)算,即|;步驟: 程序如下:#include void main() unsigned a,b,c; int n; scanf(“a=%o,n=%d”,
19、&a,&n); b=an; c=c|b; printf(“%on%o”,a,c);運(yùn)行情況如下:, 3 運(yùn)行開始時輸入八進(jìn)制數(shù)運(yùn)行開始時輸入八進(jìn)制數(shù)157653157653,即二進(jìn)制數(shù)即二進(jìn)制數(shù)11011111101010111101111110101011循環(huán)右移位后得二進(jìn)制數(shù)循環(huán)右移位后得二進(jìn)制數(shù)01111011111101010111101111110101即八進(jìn)制數(shù)即八進(jìn)制數(shù)7576575765 信息的存取一般以字節(jié)為單位。實(shí)際上,有時存儲一個信息不必用一個或多個字節(jié),例如,“真”或“假”用或表示,只需位即可。在計(jì)算機(jī)用于過程控制、參數(shù)檢測或數(shù)據(jù)通信領(lǐng)域時,控制信息往往只占一個字節(jié)中的一個或幾個二進(jìn)制位,常常在一個字節(jié)中放幾個信息。(1)可以人為地將一個整型變量data分為幾部分。 但是用這種方法給一個字節(jié)中某幾位賦值太麻煩??梢晕欢谓Y(jié)構(gòu)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湘師大新版必修2化學(xué)下冊月考試卷
- 2025年粵教版必修1英語下冊月考試卷
- 2025年滬科版必修1生物上冊月考試卷
- 2025年蘇科新版九年級地理上冊階段測試試卷
- 2025年人教A新版二年級語文上冊階段測試試卷
- 2024砂礫石供貨合同
- 2025年外研版八年級地理上冊月考試卷含答案
- 二零二五年度游戲公司兼職業(yè)務(wù)員游戲推廣服務(wù)合同3篇
- 2025年冀少新版八年級物理下冊月考試卷
- 2025年統(tǒng)編版2024高三物理上冊階段測試試卷含答案
- 2023-2024學(xué)年浙江省寧波市鎮(zhèn)海區(qū)四年級(上)期末數(shù)學(xué)試卷
- 新員工入職培訓(xùn)員工手冊
- 北京生命科技研究院 筆試
- 腸梗阻課件完整版本
- 融資合作法律意見
- 電子招投標(biāo)測試試題匯編
- 2024年度技術(shù)研發(fā)合作合同with知識產(chǎn)權(quán)歸屬與利益分配
- 廣東省梅州市2023-2024學(xué)年高一上學(xué)期期末考試 歷史 含解析
- 湖北省武漢市洪山區(qū)2023-2024學(xué)年六年級上學(xué)期語文期末試卷(含答案)
- 飛書手把手使用教程培訓(xùn)
- 2025屆山東省濰坊市高三物理第一學(xué)期期中經(jīng)典試題含解析
評論
0/150
提交評論