資源描述:
《15第15章位運(yùn)算第15章位運(yùn)算》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第15章位運(yùn)算主講人:成江湖學(xué)長電話:13975026749QQ:16347548C語言中,位運(yùn)算的對象只能是整型或字符型,不能是其他類型的數(shù)據(jù)。15.1位運(yùn)算符運(yùn)算符含義優(yōu)先級~按位求反1(高)<<左移2>>右移2&按位與3^按位異或4
2、按位或5(低)說明:只有求反運(yùn)算符(~)為單目運(yùn)算符,其余均為雙目運(yùn)算符。各雙目運(yùn)算符與賦值運(yùn)算符結(jié)合可以組成擴(kuò)展的賦值運(yùn)算符擴(kuò)展運(yùn)算符表達(dá)式等價(jià)的表達(dá)式<<=a=<<2a=a<<2>>=b=>>2b=b>>2&=a&=ba=a&b^=a^=ba=a^b
3、=a
4、=ba=a
5、b15.2
6、位運(yùn)算符的運(yùn)算功能1、“按位取反”運(yùn)算運(yùn)算功能:把運(yùn)算對象的內(nèi)容按位取反,即,使每一位上的0變1,1變0例如:~0115先把八進(jìn)制115轉(zhuǎn)換成二進(jìn)制001001101,因?yàn)橐粋€(gè)字節(jié)有八位,所以舍去一個(gè)前置0后為二進(jìn)制為01001101求反后二進(jìn)制為:10110010,最后轉(zhuǎn)化為八進(jìn)制為02622、“左移”運(yùn)算左移時(shí),右端(低位)補(bǔ)0;左端(高位)移出的部分舍棄例如:chara=6,b;b=a<<1;十進(jìn)制a=6轉(zhuǎn)化為二進(jìn)制為:110,因?yàn)橐粋€(gè)字節(jié)有八位,所以前面要補(bǔ)0,所以為00000110左移1位后為:0000110
7、0轉(zhuǎn)換為十進(jìn)制為12說明:1)左移時(shí),若左端移出的部分不包含有效二進(jìn)制1,則每左移一位,相當(dāng)于移位對象乘以2.2)做位運(yùn)算時(shí),速度快,所以有時(shí)用左移代替乘法運(yùn)算,以加快運(yùn)算速度。3)如果左端移出的部分包含有效二進(jìn)制數(shù)1,移位對象乘以2的特性就不適用了。例如:chara=64,b;b=a<<2;十進(jìn)制a=64轉(zhuǎn)化為二進(jìn)制為:1000000,因?yàn)橐粋€(gè)字節(jié)有八位,所以前面要補(bǔ)0,所以為01000000左移二位后為:00000000轉(zhuǎn)換為十進(jìn)制為0注意:a的值沒有變3、“右移”運(yùn)算右移時(shí),右端(低位)移出的二進(jìn)制數(shù)舍棄,左端(
8、高位)移入的二進(jìn)制數(shù)分兩種情況:對于無符號整數(shù)和正整數(shù),高位補(bǔ)0,對于負(fù)整數(shù),高位補(bǔ)1。這是因?yàn)樨?fù)數(shù)在機(jī)器內(nèi)均用補(bǔ)碼表示所致。例如:shortinta=-8,b;b=a>>2;a=-8因?yàn)閍為shortint型數(shù)據(jù),用二個(gè)字節(jié)來存儲,所以a的原碼為1000000000001000,a的反碼為1111111111110111,a的補(bǔ)碼為:1111111111111000,右移二位后為1111111111111110轉(zhuǎn)化為十進(jìn)制為-2說明:1)右移時(shí),若右端移出部分不包含有效數(shù)字1,則每右移一位相當(dāng)于移位對象除以2。2)做
9、位運(yùn)算時(shí),速度快,所以有時(shí)用右移代替除法運(yùn)算,以加快運(yùn)算速度。3)如果右端移出的部分包含有效二進(jìn)制數(shù)1,移位對象除以2的特性就不適用了。4、“按位與”運(yùn)算運(yùn)算符&的作用:把參加運(yùn)算的兩個(gè)運(yùn)算數(shù)按對應(yīng)的二進(jìn)制位分別進(jìn)行“與”運(yùn)算,即兩個(gè)相應(yīng)的位都為1時(shí),該位的結(jié)果為1,否則為0例如:12&1012:0000110010:00001010&:00001000轉(zhuǎn)化為十進(jìn)制為8說明:任何位上的二進(jìn)制數(shù),只要和0“與”,該位即被屏蔽(清零);和1“與”,該位保留原值不變。例如:Chara=0322轉(zhuǎn)換為二進(jìn)制為11010010若
10、要保留a的第五位,只要和00010000(020)這樣的數(shù)做“與”運(yùn)算即可5、“按位異或”運(yùn)算“按位異或”運(yùn)算的規(guī)則是:參與運(yùn)算的兩個(gè)運(yùn)算數(shù)中相對應(yīng)的二進(jìn)制位上,若數(shù)相同,則該位的結(jié)果為0;若數(shù)不同,則該位的結(jié)果為1。例如:00110011八進(jìn)制06311000011八進(jìn)制0303^11110000八進(jìn)制0360說明:和1進(jìn)行異或運(yùn)算,則使某位的數(shù)進(jìn)行翻轉(zhuǎn);和0進(jìn)行異或運(yùn)算,則使某位保持原數(shù)。chara=0152a的高四位不變,低四位取反000011110152:01101010017:00001111^:011001
11、01八進(jìn)制:01456、“按位或”運(yùn)算“按位或“運(yùn)算規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算數(shù)中,只要兩個(gè)相應(yīng)的二進(jìn)制位中有一個(gè)為1,該位的運(yùn)算結(jié)果即為1;只有當(dāng)兩個(gè)相應(yīng)位的數(shù)都為0時(shí),該位的運(yùn)算結(jié)果才為0。0123:01010011014:00001100
12、:01011111八進(jìn)制0137說明:“按位或“可以使一個(gè)數(shù)中的指定位上置成1,其它位不變,要置1與1做“或”運(yùn)算,保持不變的與0做“或“運(yùn)算即可例如:想使a的高四位不變,低四位置1我們只要與00001111(八進(jìn)制為017)做“或運(yùn)算即可“7、位數(shù)不同的運(yùn)算之間的運(yùn)算規(guī)則1)先
13、將兩個(gè)運(yùn)算數(shù)右端對齊2)再將位數(shù)短的一個(gè)運(yùn)算數(shù)往高位擴(kuò)充,即:無符號數(shù)和正整數(shù)左側(cè)用0補(bǔ)全,負(fù)數(shù)左側(cè)用1補(bǔ)全,然后對位數(shù)相等的這兩個(gè)運(yùn)算數(shù)進(jìn)行位運(yùn)算。