




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、12前面介紹的各種運(yùn)算都是以字節(jié)作為最基前面介紹的各種運(yùn)算都是以字節(jié)作為最基本單位進(jìn)行的。本單位進(jìn)行的。 但在很多系統(tǒng)程序中常要求但在很多系統(tǒng)程序中常要求在位在位(bit)一級(jí)進(jìn)行運(yùn)算或處理。語(yǔ)言提供一級(jí)進(jìn)行運(yùn)算或處理。語(yǔ)言提供了位運(yùn)算的功能,這使得語(yǔ)言也能像匯編了位運(yùn)算的功能,這使得語(yǔ)言也能像匯編語(yǔ)言一樣用來(lái)編寫(xiě)系統(tǒng)程序。語(yǔ)言一樣用來(lái)編寫(xiě)系統(tǒng)程序。3語(yǔ)言提供了六種位運(yùn)算符語(yǔ)言提供了六種位運(yùn)算符運(yùn)算符運(yùn)算符含義含義&按位與按位與|按位或按位或按位異或按位異或取反取反右移右移左移左移4 按位與運(yùn)算符按位與運(yùn)算符“&”是雙目運(yùn)算符。其功能是參與是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相與
2、。只有對(duì)應(yīng)的兩運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相與。只有對(duì)應(yīng)的兩個(gè)二進(jìn)位均為個(gè)二進(jìn)位均為1時(shí),結(jié)果位才為時(shí),結(jié)果位才為1,否則為,否則為0。參。參與運(yùn)算的數(shù)以與運(yùn)算的數(shù)以補(bǔ)碼補(bǔ)碼方式出現(xiàn)。方式出現(xiàn)。 00001001(&) 00000101 00000001(9(9的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )(5(5的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )(1(1的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )0&0=00&1=01&0=01&1=1例如:例如:9 9&5 5可寫(xiě)算式如下:可寫(xiě)算式如下: 可見(jiàn)可見(jiàn)9 9&5=15=1。5清零清零取一個(gè)數(shù)中的某些指定位取一個(gè)數(shù)中的某些指定位 00101011(&) 01000100 000000
3、0000101100 1010110000000000 1111111100000000 10101100abc00101100 1010110011111111 0000000000101100 00000000abcb=(377)8 c=a&bb=(177400)8 c=a&b6 想保留哪一位,就與一個(gè)數(shù)進(jìn)行想保留哪一位,就與一個(gè)數(shù)進(jìn)行&運(yùn)算,此運(yùn)算,此數(shù)在該位取數(shù)在該位取1 01010100(&) 00111011 00010000保留左面的保留左面的3、4、5、7、8位位7 按位或運(yùn)算符按位或運(yùn)算符“| |”是雙目運(yùn)算符。其功能是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相或。是
4、參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相或。只要對(duì)應(yīng)的兩個(gè)二進(jìn)位有一個(gè)為只要對(duì)應(yīng)的兩個(gè)二進(jìn)位有一個(gè)為1 1時(shí),結(jié)果時(shí),結(jié)果位就為位就為1 1。參與運(yùn)算的兩個(gè)數(shù)均以補(bǔ)碼出現(xiàn)。參與運(yùn)算的兩個(gè)數(shù)均以補(bǔ)碼出現(xiàn)。0| |0=00| |1=11| |0=11| |1=1例如:例如:9 9| |5 5可寫(xiě)算式如下:可寫(xiě)算式如下: 00001001(|) 00000101 00001101(9(9的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )(5(5的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )(13(13的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )可見(jiàn)可見(jiàn)9 9|5=135=13。8 常用來(lái)對(duì)一個(gè)數(shù)據(jù)的某些位定值為常用來(lái)對(duì)一個(gè)數(shù)據(jù)的某些位定值為1a|0377例如
5、:例如:a是一個(gè)整數(shù)(是一個(gè)整數(shù)(16位),如果有下式位),如果有下式則低則低8位全置為位全置為1,高,高8位保留原樣位保留原樣9按位異或運(yùn)算符按位異或運(yùn)算符“”是雙目運(yùn)算符。其功能是參是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相異或,當(dāng)兩對(duì)應(yīng)與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相異或,當(dāng)兩對(duì)應(yīng)的二進(jìn)位相的二進(jìn)位相異異時(shí),結(jié)果為時(shí),結(jié)果為1。相。相同同時(shí),結(jié)果為時(shí),結(jié)果為0。參與運(yùn)算數(shù)仍以補(bǔ)碼出現(xiàn)參與運(yùn)算數(shù)仍以補(bǔ)碼出現(xiàn) 00=001=110=111=0例如:例如:9 95 5可寫(xiě)算式如下:可寫(xiě)算式如下: 00001001() 00000101 00001100(9(9的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼)
6、)(5(5的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )(12(12的二進(jìn)制補(bǔ)碼的二進(jìn)制補(bǔ)碼) )可見(jiàn)可見(jiàn)9 95=125=12。10 使特定位翻轉(zhuǎn)使特定位翻轉(zhuǎn) 01111010() 00001111 01110101 與與0相相,保留原值,保留原值 00001001() 00000000 0000100111 交換兩個(gè)值,不用臨時(shí)變量交換兩個(gè)值,不用臨時(shí)變量例如:例如:a=3, b=4,交換,交換a和和b 00000011() 00000100 00000111() 00000100 00000011() 00000111 00000100a=3b=4a=ab=7b=ab=3a=ba=4b=4a=7a=ab
7、b=ba= bab=abb=a0=aa=ab=abbab=ba=abb=baa=ab12 求反運(yùn)算符求反運(yùn)算符為單目運(yùn)算符,具有右結(jié)合為單目運(yùn)算符,具有右結(jié)合性。其功能是對(duì)參與運(yùn)算的數(shù)的各二進(jìn)位性。其功能是對(duì)參與運(yùn)算的數(shù)的各二進(jìn)位按位求反。運(yùn)算級(jí)別較高(按位求反。運(yùn)算級(jí)別較高(2 2級(jí))級(jí))例如:例如: 9 9的運(yùn)算如下:的運(yùn)算如下: () 00001001 1111011013若一個(gè)整數(shù)若一個(gè)整數(shù)a為為16位,想使最低一位為位,想使最低一位為0,可以用,可以用a=a&0177776如果將如果將c源程序移植到以源程序移植到以32位存放一個(gè)整數(shù)的計(jì)算位存放一個(gè)整數(shù)的計(jì)算機(jī)上,應(yīng)改用機(jī)上,應(yīng)改用a
8、=a&037777777776如上,移植性差,可改為:如上,移植性差,可改為:a=a&114 左移運(yùn)算符左移運(yùn)算符“”是雙目運(yùn)算符。其功能把是雙目運(yùn)算符。其功能把“ ”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由若干位,由“”右邊的數(shù)指定移動(dòng)的位數(shù),右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)高位丟棄,低位補(bǔ)0 0。a的值的值二進(jìn)制形式二進(jìn)制形式a1a”是雙目運(yùn)算符。其功能是是雙目運(yùn)算符。其功能是把把“ ”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,移若干位,“”右邊的數(shù)指定移動(dòng)的位數(shù)。右邊的數(shù)指定移動(dòng)的位數(shù)。 例如:設(shè)例如:設(shè) a=15,有式子,有
9、式子a2表示把表示把00001111右移為右移為00000011(十進(jìn)制十進(jìn)制3)注意注意:對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng)。:對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)當(dāng)為正數(shù)時(shí),最高位補(bǔ)0;而為負(fù)數(shù)時(shí),符號(hào)位為;而為負(fù)數(shù)時(shí),符號(hào)位為1,最高位是補(bǔ)最高位是補(bǔ)0或是補(bǔ)或是補(bǔ)1 取決于編譯系統(tǒng)的規(guī)定。移入取決于編譯系統(tǒng)的規(guī)定。移入0的稱(chēng)為的稱(chēng)為“邏輯右移邏輯右移”,即簡(jiǎn)單右移,移入,即簡(jiǎn)單右移,移入1的稱(chēng)為的稱(chēng)為“算術(shù)右移算術(shù)右移”,很多系統(tǒng)規(guī)定為補(bǔ),很多系統(tǒng)規(guī)定為補(bǔ)1。17位運(yùn)算符和賦值運(yùn)算符可以組成復(fù)合賦值運(yùn)算符位運(yùn)算符和賦值運(yùn)算符可以組成復(fù)合賦值運(yùn)算符&=、|=
10、、=、和左移和左移=、4a=20c=(04)c=150 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1b=a&c0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 021c=(04)c=150 0 0 0 0 0 0 0 0 0 0 0 1 1 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1001 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0(04)0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 104; c=(030 1 1 0 0 0 0 0 0 0 0 0 0
11、 0 0 0b=a13d=b|c0 1 1 1 1 0 1 1 1 1 1 1 0 1 0 125main()unsigned a, b, c, d; int n; scanf(“a=%o,n=%d”, &a, &n); b=an; d=c|b; printf(“%on%o”, a, d);運(yùn)行情況運(yùn)行情況:a=157653,n=3157653157653757657576526 前面介紹的對(duì)內(nèi)存中信息的存取都以字節(jié)為單位。前面介紹的對(duì)內(nèi)存中信息的存取都以字節(jié)為單位。實(shí)際上有些信息的存取不必用一個(gè)或多個(gè)字節(jié),實(shí)際上有些信息的存取不必用一個(gè)或多個(gè)字節(jié),例如,例如,“真真”和和“假假”用用0 0或
12、或1 1表示,只需表示,只需1 1位即可。位即可。當(dāng)計(jì)算機(jī)用于當(dāng)計(jì)算機(jī)用于過(guò)程控制過(guò)程控制、參數(shù)檢測(cè)參數(shù)檢測(cè)或或數(shù)據(jù)通訊數(shù)據(jù)通訊領(lǐng)領(lǐng)域時(shí),控制信息往往只占一個(gè)字節(jié)的一個(gè)或幾個(gè)域時(shí),控制信息往往只占一個(gè)字節(jié)的一個(gè)或幾個(gè)二進(jìn)制位,常常在一個(gè)字節(jié)中存放幾個(gè)信息。二進(jìn)制位,常常在一個(gè)字節(jié)中存放幾個(gè)信息。 向一個(gè)字節(jié)中的一個(gè)或幾個(gè)二進(jìn)位賦值有如下兩向一個(gè)字節(jié)中的一個(gè)或幾個(gè)二進(jìn)位賦值有如下兩種方法種方法27dataabcd28現(xiàn)設(shè)現(xiàn)設(shè)c的原值為的原值為0,想將,想將c的值變?yōu)榈闹底優(yōu)?20 0 0 0dataabcd0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0120 0 0 0 0 0
13、0 0 1 1 0 0 0 0 0 0124data|1241 1 0 0124data|124.29如果如果c的原值不為的原值不為0,想將,想將c的值變?yōu)榈闹底優(yōu)?2data=data&(0177417)8abcd對(duì)對(duì)c清零清零data1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1(0177417)80 0 0 0dataabcd30 (0177417)8稱(chēng)為稱(chēng)為“屏蔽字屏蔽字”,即把,即把c以以外的信息屏蔽起來(lái)不受影響,只使外的信息屏蔽起來(lái)不受影響,只使c變?yōu)樽優(yōu)?,但但(0177417)8很難記,為此改為如下很難記,為此改為如下data=data& (154)data=d
14、ata&(0177417)8 相當(dāng)于:相當(dāng)于:0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 10 0 0 0 0 0 0 0 1 1 1 1 0 0 0 01 1 1 1 1 1 1 1 0 0 0 0 1 1 1 115154(154)31data=data& (154) |124將將12賦給賦給c0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1150 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0n 首先取首先取n右端右端4位的值位的值n&15如果想將如果想將n右端右端4位的值賦予位的值賦予c0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
15、 0n&150 0 0 0data &(154)abcd32data=data&(154)|(n&15)4 與與c中已清零的中已清零的data按位或按位或 左移左移4位位(n&15)40 0 0 0 0 0 0 0 1 0 1 0 0 0 0 00 0 0 0data &(15a=0; pbit-b&=3; pbit-c|=1; printf(%d,%d,%dn,pbit-a,pbit-b,pbit-c);37main()struct bs unsigned a:1; unsigned b:3; unsigned c:4; bit,*pbit; bit.a=1; bit.b=7; bit.c=
16、15; printf(%d,%d,%dn,bit.a,bit.b,bit.c); pbit=&bit; pbit-a=0; pbit-b&=3; pbit-c|=1; printf(%d,%d,%dn,pbit-a,pbit-b,pbit-c);382)2)一個(gè)位段必須存儲(chǔ)在同一個(gè)字節(jié)中,不能跨兩個(gè)字節(jié)。一個(gè)位段必須存儲(chǔ)在同一個(gè)字節(jié)中,不能跨兩個(gè)字節(jié)。如一個(gè)字節(jié)所剩空間不夠存放另一位段時(shí),應(yīng)從下一如一個(gè)字節(jié)所剩空間不夠存放另一位段時(shí),應(yīng)從下一單元起存放該位段。也可以有意使某位段從下一單元單元起存放該位段。也可以有意使某位段從下一單元開(kāi)始。例如:開(kāi)始。例如:struct bs unsigned
17、a:4 unsigned :0 /*空域空域*/ unsigned b:4 /*從下一單元開(kāi)始存放從下一單元開(kāi)始存放*/ unsigned c:4 1)1)位段成員的類(lèi)型必須指定為位段成員的類(lèi)型必須指定為unsignedunsigned或或intint類(lèi)型類(lèi)型393)3)由于位由于位段段不允許跨兩個(gè)字節(jié),因此位不允許跨兩個(gè)字節(jié),因此位段段的的長(zhǎng)度不能大于一個(gè)字節(jié)的長(zhǎng)度,也就是說(shuō)長(zhǎng)度不能大于一個(gè)字節(jié)的長(zhǎng)度,也就是說(shuō)不能超過(guò)不能超過(guò)8 8位二進(jìn)位。不能定義位段數(shù)組。位二進(jìn)位。不能定義位段數(shù)組。4)4)位位段段可以無(wú)位可以無(wú)位段段名,這時(shí)它只用來(lái)作填充名,這時(shí)它只用來(lái)作填充或調(diào)整位置。無(wú)名的位或調(diào)整
18、位置。無(wú)名的位段段是不能使用的。是不能使用的。例如:例如:struct k int a:1 int :2 /*該該2位不能使用位不能使用*/ int b:3 int c:2 ;405)5)位位段段可以用整型格式輸出,也可用可以用整型格式輸出,也可用%u%u、%o%o、%x%x等各式輸出等各式輸出6)6)位位段段可以在數(shù)值表達(dá)式中引用,它會(huì)被系可以在數(shù)值表達(dá)式中引用,它會(huì)被系統(tǒng)自動(dòng)地轉(zhuǎn)換成整型數(shù)。如下是對(duì)的統(tǒng)自動(dòng)地轉(zhuǎn)換成整型數(shù)。如下是對(duì)的printf(“%d,%d,%d”, data.a, data.b, data.c);data.a+5/data.b411. 位運(yùn)算是語(yǔ)言的一種特殊運(yùn)算功能,它是以位運(yùn)算是語(yǔ)言的一種特殊運(yùn)算功能,它是以二進(jìn)制位為單位進(jìn)行運(yùn)算的。位運(yùn)算符只有邏輯二進(jìn)制位為單位進(jìn)行運(yùn)算的。位運(yùn)算符只有邏輯運(yùn)算和移位運(yùn)算兩類(lèi)。位運(yùn)算符可以與賦值符一運(yùn)算和移位運(yùn)算兩類(lèi)。位運(yùn)算符可以與賦值符一起組成復(fù)合賦值符。如起組成復(fù)合賦值符。如&=,|=,=,=,=等。等。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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)臨時(shí)職工合同范本
- 信托通道業(yè)務(wù)合同范例
- 個(gè)人紅酒購(gòu)銷(xiāo)合同范本
- 仔豬采購(gòu)合同范本
- 代收美金合同范本
- 個(gè)人和業(yè)主裝修合同范本
- 臨時(shí)幼師合同范本
- 植物油罐高空作業(yè)施工方案
- 2025四川瀘州市納溪區(qū)融新文化傳媒有限責(zé)任公司招聘2人筆試參考題庫(kù)附帶答案詳解
- 勞務(wù)服務(wù)協(xié)議合同范本
- 感謝對(duì)手閱讀附答案
- 材料性能學(xué)(第2版)付華課件0-緒論-材料性能學(xué)
- GB/T 8012-2000鑄造錫鉛焊料
- 第一課 第一章 AutoCAD 2012概述入門(mén)
- 2023年湖南省普通高中學(xué)業(yè)水平考試數(shù)學(xué)版含答案
- 超市店長(zhǎng)考核方案(實(shí)例)
- 德力西質(zhì)量獎(jiǎng)自評(píng)報(bào)告組織概述
- 任務(wù)八-汽車(chē)四輪定位的檢測(cè)分析課件
- 自相矛盾課件(省一等獎(jiǎng))
- 小學(xué)數(shù)學(xué)思想方法(課件)
- 小學(xué)語(yǔ)文人教五年級(jí)下冊(cè)最閃亮的星課件
評(píng)論
0/150
提交評(píng)論