




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八章位運(yùn)算第1頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
8.2位段第八章位運(yùn)算第2頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【學(xué)習(xí)目標(biāo)】
掌握幾種常用運(yùn)算符及表達(dá)式的用法
理解位運(yùn)算的實(shí)際應(yīng)用
能進(jìn)行簡(jiǎn)單的位運(yùn)算
第3頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【實(shí)例53兩個(gè)數(shù)的幾種位運(yùn)算】
設(shè)a=255,b=10,對(duì)兩個(gè)數(shù)a和b進(jìn)行位運(yùn)算并輸出結(jié)果
。程序的運(yùn)行結(jié)果下圖所示。第4頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【程序代碼】
#include"stdio.h"main(){inta=255,b=10,i; /*定義3個(gè)整型變量*/printf("The%d&%dis%d\n",a,b,a&b);/*計(jì)算兩個(gè)數(shù)的與運(yùn)算*/printf("The%d|%dis%d\n",a,b,a|b);/*計(jì)算兩個(gè)數(shù)的或運(yùn)算*/printf("The%d^%dis%d\n",a,b,a^b);/*計(jì)算兩個(gè)數(shù)的異或運(yùn)算*/printf("The~%dis%d\n",a,~a);/*計(jì)算a進(jìn)行取反運(yùn)算的值*/printf("decimal\t\tshiftleftby\tresult\n");for(i=1;i<9;i++){b=a<<i; /*使a左移i位*/printf("%d\t\t%d\t\t%d\n",a,i,b);/*輸出當(dāng)前左移結(jié)果*/} printf("decimal\t\tshiftrightby\tresult\n");for(i=1;i<9;i++){b=a>>i; /*使a右移i位*/printf("%d\t\t%d\t\t%d\n",a,i,b);}/*輸出當(dāng)前右移結(jié)果*/getch();}第5頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】位運(yùn)算是指進(jìn)行二進(jìn)制位的運(yùn)算。它的運(yùn)算對(duì)象不是以字節(jié)為單位,而是對(duì)內(nèi)存中存儲(chǔ)數(shù)據(jù)的二進(jìn)制位進(jìn)行運(yùn)算。每一個(gè)二進(jìn)制位的值是0或1。一個(gè)字節(jié)由8個(gè)二進(jìn)制位組成,其中最右邊的一位稱(chēng)為“最低位”或“最低有效位”,即第0位,向左是第1位,第2位,依此類(lèi)推,最左邊的一位是“最高位”或“最高有效位”。參與位運(yùn)算的運(yùn)算數(shù)據(jù)只能是整型數(shù)據(jù)或字符型數(shù)據(jù),不能是實(shí)型等其他類(lèi)型數(shù)據(jù)。語(yǔ)言提供了6中位運(yùn)算符。其中除了運(yùn)算符“~”是單目運(yùn)算符之外,其他的都是雙目運(yùn)算符。位運(yùn)算符含義例子運(yùn)算功能&按位與a&ba和b按位與|按位或A|ba和b按位或^按位異或A^ba和b按位異或~按位取反~aa按位取反<<左移A<<2a左移2位>>右移A>>2a右移2位第6頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】按位與運(yùn)算符(&)按位與運(yùn)算符“&”是雙目運(yùn)算符,其功能是對(duì)兩個(gè)運(yùn)算數(shù)據(jù)的對(duì)應(yīng)二進(jìn)制位進(jìn)行與運(yùn)算。參與運(yùn)算的數(shù)據(jù)以二進(jìn)制補(bǔ)碼方式出現(xiàn),其運(yùn)算規(guī)則是只有對(duì)應(yīng)的兩個(gè)二進(jìn)制位均為1時(shí),結(jié)果位才為1;否則為0。即: 0&0=0;0&1=0;1&0=0;1&1=1;按位與運(yùn)算規(guī)則可知,一個(gè)數(shù)的某二進(jìn)制位與0相與,結(jié)果為0;與1相與,結(jié)果保留原值。位與運(yùn)算有如下兩個(gè)特殊用途:清零:如果想將一個(gè)數(shù)a的某些位置0,即其全部的二進(jìn)制位均為0,只需找另一個(gè)數(shù)b,其相應(yīng)位為0,然后與a進(jìn)行按位與運(yùn)算即可。獲取或保留一個(gè)數(shù)中的特定位:如果想獲取數(shù)a的某些位或?qū)?shù)a的某些位保留,就與一個(gè)數(shù)b進(jìn)行與運(yùn)算,數(shù)b在該位取1。第7頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】按位或運(yùn)算符(|)按位或運(yùn)算符“|”是雙目運(yùn)算符,其功能是對(duì)兩個(gè)運(yùn)算數(shù)據(jù)的對(duì)應(yīng)二進(jìn)制位進(jìn)行或運(yùn)算。其運(yùn)算規(guī)則是只有對(duì)應(yīng)的兩個(gè)二進(jìn)制位均為0時(shí),結(jié)果位才為0;否則為1。即: 0|0=0;0|1=1;1|0=1;1|1=1;按位或運(yùn)算規(guī)則可知,一個(gè)數(shù)的某二進(jìn)制位與1相或,結(jié)果為1;與0相或,結(jié)果保留原值。據(jù)此,位或運(yùn)算有如下特殊用途,將一個(gè)數(shù)的某些特定位置1。第8頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】按位異或運(yùn)算符(^)按位異或運(yùn)算符“^”是雙目運(yùn)算符,其功能是對(duì)兩個(gè)運(yùn)算數(shù)據(jù)的對(duì)應(yīng)二進(jìn)制位進(jìn)行異或運(yùn)算。其運(yùn)算規(guī)則是對(duì)應(yīng)的兩個(gè)二進(jìn)制位的值不同時(shí),結(jié)果位才為1;否則為0。即:
0|0=0;0|1=1;1|0=1;1|1=0; 參與運(yùn)算的數(shù)據(jù)以二進(jìn)制補(bǔ)碼方式出現(xiàn)。按位異或運(yùn)算規(guī)則可知,一個(gè)數(shù)的某二進(jìn)制位與1相或,可使1變0,0變1;與0相異或,結(jié)果保留原值。按位異或運(yùn)算有如下3個(gè)特殊用途:保留原值。一個(gè)數(shù)與0進(jìn)行異或運(yùn)算,保留原值。使特定位翻轉(zhuǎn)。就是使將特定位中的1變?yōu)?,0變?yōu)?。交換兩個(gè)變量的值,而不借助于臨時(shí)變量。第9頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】按位取反運(yùn)算符(~)按位取反運(yùn)算符“~”為單目運(yùn)算符,其功能是把運(yùn)算數(shù)據(jù)按二進(jìn)制位取反。其運(yùn)算規(guī)則是操作數(shù)的某位二進(jìn)制位為1,則取反為0;反之,當(dāng)它為0時(shí),則取反為1。例如~9是對(duì)十進(jìn)制數(shù)9(00001001)按位取反,其運(yùn)算為:~(00001001),結(jié)果為:11110110。第10頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】按位左移運(yùn)算符(<<)左移運(yùn)算符“<<”雙目運(yùn)算符,其功能是將運(yùn)算數(shù)據(jù)中的每個(gè)二進(jìn)制位向左移動(dòng)若干位,從左邊移出去的高位部分被丟棄,右邊空出的低位部分補(bǔ)零。例如,a=a<<2,將a的二進(jìn)制數(shù)左移2位,右補(bǔ)0。若a=5,即二進(jìn)制數(shù)00000101,左移2位得00010100,即十進(jìn)制數(shù)20。由此可見(jiàn),左移運(yùn)算相當(dāng)于乘法運(yùn)算,左移1位相當(dāng)于該數(shù)乘以2,左移n位相當(dāng)于該數(shù)乘以2n,但該結(jié)論只適用于該數(shù)左移時(shí)被溢出舍棄的高位中不包含1的情況。第11頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】按位右移運(yùn)算符(>>)右移運(yùn)算符“>>”雙目運(yùn)算符,其功能是將運(yùn)算數(shù)據(jù)中的每個(gè)二進(jìn)制位向右移動(dòng)若干位,從右邊移出的低位部分被丟棄。對(duì)于無(wú)符號(hào)數(shù),左邊空出的高位部分補(bǔ)0。對(duì)于有符號(hào)數(shù),如果符號(hào)位為0(即為正數(shù)),則空出的高位部分補(bǔ)0;如果符號(hào)位為1(即為負(fù)數(shù)),空出的高位部分補(bǔ)0還是補(bǔ)1,與使用的計(jì)算機(jī)系統(tǒng)有關(guān),有的計(jì)算機(jī)系統(tǒng)補(bǔ)0,稱(chēng)為邏輯右移;有的計(jì)算機(jī)系統(tǒng)補(bǔ)1,稱(chēng)為算術(shù)右移。例如,設(shè)a=15,則a>>2表示把00001111右移為00000011,結(jié)果為a=3。第12頁(yè),共23頁(yè),2023年,2月20日,星期三8.1位運(yùn)算
【相關(guān)知識(shí)】位運(yùn)算的復(fù)合賦值運(yùn)算符位運(yùn)算復(fù)合賦值運(yùn)算符的運(yùn)算規(guī)則是:首先進(jìn)行兩個(gè)操作數(shù)的位運(yùn)算,然后再將結(jié)果賦值給左操作數(shù)。位復(fù)合運(yùn)算符含義例子等價(jià)于&=按位與賦值a&=ba=a&b|=按位或賦值a|=ba=a|b^=按位異或賦值a^=ba=a^b<<=左移賦值a<<=2a=a<<2>>=右移賦值a>>=2a=a>>2第13頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【學(xué)習(xí)目標(biāo)】
了解位段的應(yīng)用
第14頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【實(shí)例54兩個(gè)數(shù)的位運(yùn)算
】通過(guò)位段,實(shí)現(xiàn)對(duì)兩個(gè)數(shù)進(jìn)行位運(yùn)算。
程序運(yùn)行結(jié)果下圖所示。
第15頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【程序代碼】#include"stdio.h"main(){structpacked_data{unsigneda:2; /*a為位段名,占2位二進(jìn)制位*/unsignedb:4; /*b為位段名,占4位二進(jìn)制位*/unsignedc:5; /*c為位段名,占5位二進(jìn)制位*/}data,*pdata;/*data為位段變量,*pdata為位段指針變量*/data.a=3; /*將3賦給位段變量data中的位段成員a*/data.b=12; /*將12賦給位段變量data中的位段成員b*/data.c=125;/*將125賦給位段變量data中的位段成員c*/printf("data.a=%d,data.b=%d,data.c=%d\n",data.a,data.b,data.c);pdata=&data;/*指針pdata指向data的首地址*/pdata->a=2;pdata->b&=3;/*與運(yùn)算*/pdata->c|=5;/*或運(yùn)算*/printf("pdata->a=%d,pdata->b=%d,pdata->c=%d\n",pdata->a,pdata->b,pdata->c);getch();}
第16頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【相關(guān)知識(shí)】位段簡(jiǎn)介所謂“位段”是指把一個(gè)字節(jié)中的二進(jìn)制位劃分為幾個(gè)不同的區(qū)段,并說(shuō)明每個(gè)區(qū)段的位數(shù)。每個(gè)區(qū)段有一個(gè)段名,允許在程序中按段名進(jìn)行操作,這樣就可以把幾個(gè)不同的對(duì)象用一個(gè)字節(jié)中的幾個(gè)位段來(lái)表示。第17頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【相關(guān)知識(shí)】2.位段的定義和位段變量的說(shuō)明
在一個(gè)位段的定義是通過(guò)結(jié)構(gòu)體類(lèi)型定義來(lái)實(shí)現(xiàn)的,其一般格式如下。
struct位段結(jié)構(gòu)名
{類(lèi)型說(shuō)明符位段名:位段長(zhǎng)度};把一個(gè)unsigned整型數(shù)據(jù)單元分成若干段,定義形式如下:
structdt{ unsigneda:6; /*a為位段名,占6位長(zhǎng)度*/ unsignedb:2; /*b為位段名,占2位長(zhǎng)度*/ unsignedc:4; /*c為位段名,占4位長(zhǎng)度*/ unsignedd:4; /*d為位段名,占4位長(zhǎng)度*/};主函數(shù)最后添加語(yǔ)句“system("pause");”第18頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【相關(guān)知識(shí)】3.位段的定義說(shuō)明
一個(gè)位段必須存儲(chǔ)在同一個(gè)存儲(chǔ)單元中,不能跨兩個(gè)單元。如果第一個(gè)存儲(chǔ)單元所??臻g不夠存放另一個(gè)位段時(shí),則該空間不用,而以下一個(gè)單元起存放該位段。例如:
structnumdata { unsigneda:10; unsignedb:5; unsignedc:8; };第19頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【相關(guān)知識(shí)】3.位段的定義說(shuō)明
有意使某一個(gè)位段從下一個(gè)存儲(chǔ)單元開(kāi)始存放。可以用如下的定義形式:
structnumdata { unsigneda:2; unsignedb:4; unsigned0; /*空位段表示該位段不使用*/ unsignedc:5; /*另一個(gè)單元存儲(chǔ)*/ };
本來(lái)a、b、c是應(yīng)該連續(xù)存放在一個(gè)存儲(chǔ)單元中,但由于中間有一個(gè)長(zhǎng)度為0的位段,其作用是使下一個(gè)位段從下一個(gè)存儲(chǔ)單元開(kāi)始存放。因此,只能將a和b存儲(chǔ)在一個(gè)存儲(chǔ)單元,而將c存儲(chǔ)在下一個(gè)存儲(chǔ)單元。第20頁(yè),共23頁(yè),2023年,2月20日,星期三8.2位段
【相關(guān)知識(shí)】3.位段的定義說(shuō)明
定義無(wú)名位段,這時(shí)它只用來(lái)填充或調(diào)整位置,無(wú)名位段的空間是不能用的。例如:
structnumdata { unsigneda:1; unsigned:2; /*無(wú)名位段所占的兩個(gè)空間空閑不用*/ unsignedb:3; unsignedc:4; };
此位段結(jié)構(gòu)定義中的第二個(gè)位段成員是無(wú)名位段,它占用的兩個(gè)二進(jìn)制位,在a和b位段之間起分隔作用,無(wú)名位段所占的兩個(gè)空間不起作用。第21頁(yè),共2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化肥銷(xiāo)售合作合同范本
- 包裝稻草出售合同范本
- 勞務(wù)代理用工合同范本
- 單位汽車(chē)借用合同范本
- 代理機(jī)構(gòu)中標(biāo)合同范本
- 義工合同范本
- 個(gè)人對(duì)公勞務(wù)合同范本
- 與人投資飯店合同范本
- 醫(yī)院供氧安裝合同范例
- 一方婚前貸款買(mǎi)房合同范本
- 診所信息保密和安全管理制度
- 護(hù)士臨床護(hù)理組長(zhǎng)
- 土建、裝飾、維修改造等零星工程施工組織設(shè)計(jì)技術(shù)標(biāo)
- 高速公路養(yǎng)護(hù)作業(yè)安全培訓(xùn)內(nèi)容
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)
- 《大白菜種植栽培技》課件
- 北京工業(yè)大學(xué)《數(shù)據(jù)挖掘》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年物聯(lián)網(wǎng)安裝調(diào)試員(中級(jí)工)職業(yè)資格鑒定考試題庫(kù)(含答案)
- 標(biāo)準(zhǔn)化機(jī)房改造方案
- 珠海市第三人民醫(yī)院中醫(yī)智能臨床輔助診療系統(tǒng)建設(shè)方案
- 早產(chǎn)臨床診斷與治療指南
評(píng)論
0/150
提交評(píng)論