![kj-第11章位運(yùn)算ppt課件(全)_第1頁(yè)](http://file4.renrendoc.com/view/d6c45ae7b603e8bfe200b9285b7fd3f5/d6c45ae7b603e8bfe200b9285b7fd3f51.gif)
![kj-第11章位運(yùn)算ppt課件(全)_第2頁(yè)](http://file4.renrendoc.com/view/d6c45ae7b603e8bfe200b9285b7fd3f5/d6c45ae7b603e8bfe200b9285b7fd3f52.gif)
![kj-第11章位運(yùn)算ppt課件(全)_第3頁(yè)](http://file4.renrendoc.com/view/d6c45ae7b603e8bfe200b9285b7fd3f5/d6c45ae7b603e8bfe200b9285b7fd3f53.gif)
![kj-第11章位運(yùn)算ppt課件(全)_第4頁(yè)](http://file4.renrendoc.com/view/d6c45ae7b603e8bfe200b9285b7fd3f5/d6c45ae7b603e8bfe200b9285b7fd3f54.gif)
![kj-第11章位運(yùn)算ppt課件(全)_第5頁(yè)](http://file4.renrendoc.com/view/d6c45ae7b603e8bfe200b9285b7fd3f5/d6c45ae7b603e8bfe200b9285b7fd3f55.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第11章 位運(yùn)算 本章概述 本章的學(xué)習(xí)目標(biāo)主要內(nèi)容1本章概述C語(yǔ)言有一個(gè)重要特點(diǎn)就是可以直接對(duì)二進(jìn)制位進(jìn)行操作,即位運(yùn)算。二進(jìn)制位簡(jiǎn)稱位(bit),其值為0或1。計(jì)算機(jī)真正執(zhí)行的正是由0和1構(gòu)成的機(jī)器指令,計(jì)算機(jī)內(nèi)數(shù)據(jù)也是由二進(jìn)制表示的。 數(shù)在計(jì)算機(jī)內(nèi)均是以補(bǔ)碼的形式存儲(chǔ)的 。本章介紹位運(yùn)算和位段結(jié)構(gòu)的有關(guān)知識(shí)。2本章的學(xué)習(xí)目標(biāo)本章教學(xué)目的:理解位運(yùn)算的概念,掌握基本位運(yùn)算運(yùn)算符的使用,理解位段的概念。本章教學(xué)重點(diǎn):基本位運(yùn)算運(yùn)算符的使用本章教學(xué)難點(diǎn):位段的概念3主要內(nèi)容11.1 位運(yùn)算符 11.2 位運(yùn)算 11.3 位運(yùn)算應(yīng)用舉例 11.4 位段結(jié)構(gòu) 411.1 位運(yùn)算符位運(yùn)算符功能舉例按位
2、取反a:對(duì)變量a的全部位取反左移 a右移 a2:將變量a的各位全部右移2位,對(duì)于無(wú)符號(hào)數(shù)和正整數(shù),高位補(bǔ)0;對(duì)于負(fù)整數(shù),高位補(bǔ)1(適用于turboc系統(tǒng))&按位與 a&b:對(duì)a與b的各對(duì)應(yīng)位進(jìn)行“按位與”運(yùn)算|按位或 a|b:對(duì)a與b的各對(duì)應(yīng)位進(jìn)行“按位或”運(yùn)算按位異或 ab:對(duì)a與b的各對(duì)應(yīng)位進(jìn)行“按位異或”運(yùn)算511.2 位運(yùn)算 取反運(yùn)算“”是一個(gè)單目運(yùn)算符,運(yùn)算量在運(yùn)算符之后,取反運(yùn)算的功能是將一個(gè)數(shù)據(jù)中所有位都取其相反值,即1變0,0變1。 運(yùn)算規(guī)則為: 1=0 0=1例11.1 對(duì)于無(wú)符號(hào)的字符型數(shù)據(jù)a=(18)10 =(00010010)2 ,則a等于(11101101)2 ,即(
3、237)10C程序如下:11.2.1 按位取反運(yùn)算6# include int main() unsigned char a=18,b; b=a; printf(“a=%d”,b); return 0; 運(yùn)行結(jié)果為: a= 237 注意以下程序與左面程序及運(yùn)行結(jié)果的區(qū)別: # include int main() char a=18,b; b=a; printf(“a=%d”,b); return 0;運(yùn)行結(jié)果:-19 前一個(gè)程序結(jié)果很好理解,后一個(gè)因?yàn)閍是帶符號(hào)數(shù)據(jù),因此a=(11101101)2的結(jié)果是一負(fù)數(shù)的補(bǔ)碼,轉(zhuǎn)換為原碼時(shí),第1位符號(hào)位不變,對(duì)剩余的部分先減1,再全部取反,因此得到的
4、二進(jìn)制原碼為:10010011,即十進(jìn)制的-19。 711.2 位運(yùn)算11.2.2 左移運(yùn)算 左移運(yùn)算“”是一個(gè)雙目運(yùn)算符,左移運(yùn)算的功能是將一個(gè)數(shù)據(jù)所有位向左移若干位,左邊(高位)移出的部分舍去,右邊(低位)自動(dòng)補(bǔ)零。 例11.2 對(duì)于無(wú)符號(hào)字符型數(shù)據(jù) a=(18)10 =(00010010)2 , a 3的結(jié)果是(10010000)2 ,即(144)108C程序如下: # include int main() unsigned char a=18, b; b=a3; printf(“a3=%d”,b); 運(yùn)行結(jié)果為: a3=144注意以下程序與左面程序的區(qū)別: # include int
5、main()char a=18,b; b=a3; printf(“a3=%d”,b); return 0; 運(yùn)行結(jié)果為: a3=-112 原因同前,對(duì)于帶符號(hào)數(shù)a,因a”是一個(gè)雙目運(yùn)算符,右移運(yùn)算的功能是將一個(gè)數(shù)據(jù)所有位向右移若干位,右邊(低位)移出的部分舍去,左邊(高位)移入的二進(jìn)制數(shù)分兩種情況:對(duì)于無(wú)符號(hào)數(shù)和正整數(shù),高位補(bǔ)0;對(duì)于負(fù)整數(shù),高位補(bǔ)1(適用于turboc系統(tǒng))。 例11.3 對(duì)于無(wú)符號(hào)字符型數(shù)據(jù) a=(18)10 =(00010010)2 , 則 a 3的結(jié)果是(00000010)2,即(2)1010C程序: # include int main() unsigned char
6、 a=18, b; b=a3; printf(“a3=%d”,b); return 0;運(yùn)行結(jié)果為: a3=21111.2 位運(yùn)算11.2.4 按位與運(yùn)算 按位“與”運(yùn)算符要求有兩個(gè)運(yùn)算量,其功能是將兩個(gè)運(yùn)算量的各個(gè)相應(yīng)位分別進(jìn)行“與”運(yùn)算。 運(yùn)算規(guī)則為: 1&1=1 0&1=0 1&0=0 0&0=0 例11.4 對(duì)于無(wú)符號(hào)數(shù)a=(173)10=(10101101)2, b=(203)10=(11001011)2, 則a&b = (10001001)2 =(137)10 10101101& 11001011 1000100112例11.5 對(duì)于有符號(hào)數(shù)a=(-83)10=(10101101)
7、2 , b=(-53)10=(11001011)2 , 則a&b = (10001001)2 =(-119)10 。以上二進(jìn)制形式是負(fù)數(shù)的補(bǔ)碼。C程序如右上所示。C程序: # include int main() unsigned char a=173,b=203,c; c=a&b; printf(“a&b=%d”,c); return 0;運(yùn)行結(jié)果為: a&b=137 10101101& 11001011 10001001C程序:# include int main() char a=-83,b=-53,c; c=a&b; printf(“a&b=%d”,c); return 0;運(yùn)行結(jié)果為
8、: a&b=-1191311.2 位運(yùn)算11.2.5 按位或運(yùn)算 按位“或”運(yùn)算符要求有兩個(gè)運(yùn)算量,其功能是將兩個(gè)運(yùn)算量的各個(gè)相應(yīng)位分別進(jìn)行“或”運(yùn)算。 運(yùn)算規(guī)則為: 1|1=1 0|1=1 1|0=1 0&0=0例11.6 對(duì)于無(wú)符號(hào)數(shù)a=(173)10=(10101101)2,b=(203)10=(11001011)2,則a|b = (11101111)2 =(239)10 10101101| 11001011 1110111114 例11.7 對(duì)于有符號(hào)數(shù) a=(-83)10=(10101101)2, b=(-53)10=(11001011)2, 則a|b = (11101111)2 =
9、(-17)10C程序: # include int main() unsigned char a=173,b=203,c; c=a|b; printf(“a|b=%d”,c); return 0; 運(yùn)行結(jié)果: a|b=239 10101101| 11001011 1110111115C程序: # include int main()char a=-83,b=-53,c; c=a|b; printf(“a|b=%d”,c); return 0; 運(yùn)行結(jié)果為: a|b= -171611.2 位運(yùn)算11.2.6 按位異或運(yùn)算 按位“異或”運(yùn)算符要求有兩個(gè)運(yùn)算量,其功能是將兩個(gè)運(yùn)算量的各個(gè)相應(yīng)位分別進(jìn)
10、行“異或”運(yùn)算。 運(yùn)算規(guī)則為: 11=0 01=1 10=1 0&0=0 。例11.8 對(duì)于無(wú)符號(hào)數(shù) a=(173)10=(10101101)2, b=(203)10=(11001011)2, 則ab = (11101111)2 =(102)10 10101101 11001011 01100110 C程序: # include int main()unsigned char a=173,b=203,c; c=ab; printf(“ab=%d”,c); return 0; 運(yùn)行結(jié)果: ab=102 1711.3 位運(yùn)算應(yīng)用舉例例11.9 對(duì)內(nèi)存中的二進(jìn)制數(shù)“01010100”進(jìn)行下列操作:
11、1. 用“按位與”實(shí)現(xiàn): (1)把存儲(chǔ)此二進(jìn)制數(shù)的內(nèi)存單元清零; (2)把此二進(jìn)制數(shù)的2到4位取出(從0位開始); (3)把此二進(jìn)制數(shù)的2、3、5位留下。 2. 用“按位或”運(yùn)算把此二進(jìn)制數(shù)后四位置1 (寫出實(shí)現(xiàn)方法) 。18(3)要把二進(jìn)制數(shù)2、3、5位留下, 與00101100進(jìn)行按位與即可, 其運(yùn)算過(guò)程為: 01010100& 00101100 000001002.把此二進(jìn)制數(shù)后四位置1,與00001111進(jìn)行按位或即可, 其運(yùn)算過(guò)程為: 01010100| 00001111 010111111.用按位與實(shí)現(xiàn):(1) 要把存儲(chǔ)此二進(jìn)制數(shù)的內(nèi)存 單元清零,與0按位與即可, 其運(yùn)算過(guò)程為:
12、01010100& 00000000 00000000(2)要取出二進(jìn)制數(shù)2到4位, 與00011100進(jìn)行按位與即可, 其運(yùn)算過(guò)程為: 01010100& 00011100 0001010019例11.10 編程將一個(gè)十六進(jìn)制整型數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)。 設(shè)該整型數(shù)占16位。 將十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的方法很多,這里我們利用位運(yùn)算來(lái)進(jìn)行處理,思路:對(duì)一個(gè)十六進(jìn)制整型數(shù)n的二進(jìn)制(16位)形式從最高位到最低位的每一位進(jìn)行測(cè)試,依次求出其值即可。 具體方法:設(shè)置一個(gè)屏蔽字mask(二進(jìn)制為1000 0000 0000 0000。其相應(yīng)的十六進(jìn)制形式為0 x8000),將mask與n進(jìn)行“與”運(yùn)算得出
13、的值如為0則最高位為0,否則最高位為1;再將mask右移一位后,與n進(jìn)行“與”運(yùn)算得出次高位,依此類推,求出每一位的值。20# include int main()unsigned int i,n,b,mask; mask=0 x8000; printf(Input a hex number to convert:); scanf(%x,&n); printf(nBinary of %0 x is:,n); for(i=0;i1; return 0; 運(yùn)行情況:Input a hex number to convert: f fBinary of f f is: 00000000-111111
14、11Input a hex number to convert: 127Binary of 0127 is:00000001-00100111 21例11.11 循環(huán)移位。 所謂循環(huán)移位是指:在移位時(shí)不丟失移位前原數(shù)據(jù)的所有位,將其作為另一端的補(bǔ)入位。 如:將11110001循環(huán)右移1位,應(yīng)為11111000。 11110001循環(huán)右移3位,應(yīng)為00111110。 22實(shí)現(xiàn)將無(wú)符號(hào)數(shù)a循環(huán)右移n位的方法: (1) 將a左移16-n位存入b中; (2) 將a右移n位存入c中; (3) 將b與c按位進(jìn)行“或運(yùn)算”,則結(jié)果便為所需結(jié)果。23# include int main()unsigned i
15、nt n,a,b,c,d; printf(Input a Hex number:); scanf(%x,&a); printf(nInput the number of bit to move:); scanf(%d,&n); b=an; d=b|c; printf(nThe result of move:%x,d); return 0;運(yùn)行情況:Input a Hex number:f2d3Input the number of bit to move:3The result of move:7e5a 2411.4 位段結(jié)構(gòu)1. 位段結(jié)構(gòu)的概念 位段結(jié)構(gòu)是一種結(jié)構(gòu)體類型,只不過(guò)是在結(jié)構(gòu)體中含
16、有以位為單位定義存儲(chǔ)長(zhǎng)度的成員。采用這種結(jié)構(gòu)可以節(jié)省存儲(chǔ)空間、方便某些特定的操作。 2 . 位段結(jié)構(gòu)的定義struct bytedata unsigned a : 2 ; /*占2位*/ unsigned b : 1 ; /*占1位*/ unsigned C: 3 ; /*占3位*/ unsigned d : 2 ; /*占2位*/ 位段結(jié)構(gòu)中位段的定義: unsigned : 例如25其存儲(chǔ)結(jié)構(gòu)如下圖:struct bytedata unsigned a : 2 ; /*占2位*/ unsigned b : 1 ; /*占1位*/ unsigned : 3 ; /*占3位,無(wú)字段名,不能引用
17、*/ unsigned d : 2 ; /*占2位*/ 如果需要可以跳過(guò)某些不用的位,只要將這些位段不指定位段名就無(wú)法引用。例如: 26 如果某一位段為位數(shù)為0的無(wú)名位段,則表示其下一個(gè)位段從另一個(gè)字節(jié)開始。 還可以在一個(gè)結(jié)構(gòu)體中混用位段與普通結(jié)構(gòu)體成員。例如:struct bytedata int i; /*非位段,整型,占2個(gè)字節(jié)*/ unsigned a : 2 ; /*占2位*/ unsigned b : 1 ; /*占1位*/ unsigned : 0 ; /*無(wú)名,0長(zhǎng)度,則下位段從下字節(jié)開始*/ unsigned c : 2 ; /*從第4個(gè)字節(jié)開始占2位*/27 對(duì)位段的引用方法和引用結(jié)構(gòu)體變量中的成員相同 ,例如,若data是struct bytedata類型的變量,即有: struct bytedata data ;則可以用后面的形式引用每個(gè)成員:data.i、data.a、data.b、data.c。 可以用下面形式輸出每個(gè)成員
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江2025年春季浙江省國(guó)際經(jīng)濟(jì)貿(mào)易學(xué)會(huì)招聘筆試歷年參考題庫(kù)附帶答案詳解
- 河源2025年廣東河源職業(yè)技術(shù)學(xué)院招聘博士研究生5人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年中國(guó)堵縫槍市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)光學(xué)投影研磨機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 2025年車庫(kù)大門項(xiàng)目可行性研究報(bào)告
- 2025年自動(dòng)拔蓋機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年立臥式可調(diào)鉆床項(xiàng)目可行性研究報(bào)告
- 2025年玻璃字畫乳化膏項(xiàng)目可行性研究報(bào)告
- 2025年水電站型自動(dòng)保壓液控蝶閥項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)數(shù)字溫度電勢(shì)計(jì)行業(yè)投資前景及策略咨詢研究報(bào)告
- 《語(yǔ)用學(xué)之指示語(yǔ)》課件
- 《對(duì)折剪紙》課件
- 小學(xué)數(shù)學(xué)人教版六年級(jí)上冊(cè)分?jǐn)?shù)混合運(yùn)算練習(xí)題
- 培訓(xùn)學(xué)校 組織架構(gòu)及部門崗位職責(zé)
- 調(diào)車作業(yè)-調(diào)車概述(鐵路行車組織)
- 【住院患者跌倒或墜床預(yù)防護(hù)理措施研究國(guó)內(nèi)外文獻(xiàn)綜述3300字】
- 2023施工項(xiàng)目部標(biāo)準(zhǔn)化工作手冊(cè)
- 酒店員工招聘與面試技巧培訓(xùn)課件
- 技術(shù)服務(wù)合同-英文版模板
- 公眾聚集場(chǎng)所消防技術(shù)標(biāo)準(zhǔn)要點(diǎn)
- 人教部編版三年級(jí)上冊(cè)語(yǔ)文【選擇題】專項(xiàng)復(fù)習(xí)訓(xùn)練練習(xí)100題
評(píng)論
0/150
提交評(píng)論