C語(yǔ)言程序設(shè)計(jì)第十章位運(yùn)算(完)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十章位運(yùn)算(完)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十章位運(yùn)算(完)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十章位運(yùn)算(完)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十章位運(yùn)算(完)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第十章第十章 位運(yùn)算位運(yùn)算 內(nèi)容提要:內(nèi)容提要:位邏輯運(yùn)算位邏輯運(yùn)算移位運(yùn)算移位運(yùn)算復(fù)合位運(yùn)算復(fù)合位運(yùn)算位段位段 位邏輯運(yùn)算位邏輯運(yùn)算 移位運(yùn)算移位運(yùn)算 復(fù)合位運(yùn)算復(fù)合位運(yùn)算 位段位段位運(yùn)算是指對(duì)操作數(shù)以二進(jìn)制位(位運(yùn)算是指對(duì)操作數(shù)以二進(jìn)制位(bitbit)為為單位進(jìn)行數(shù)據(jù)加工。單位進(jìn)行數(shù)據(jù)加工。c c語(yǔ)言的位運(yùn)算功能有:語(yǔ)言的位運(yùn)算功能有: 位邏輯運(yùn)算(四種);位邏輯運(yùn)算(四種); 位移操作(兩種)。位移操作(兩種)。參加位操作的操作數(shù)必須是整型常量或變量。參加位操作的操作數(shù)必須是整型常量或變量。一、位邏輯運(yùn)算一、位邏輯運(yùn)算:位位 邏邏 輯輯 運(yùn)運(yùn) 算算 種種 類(lèi)類(lèi)運(yùn)算符運(yùn)算符名名稱(chēng)稱(chēng)例例子

2、子功功能能 位反位反 b b求求b b的位反的位反& &位與位與b & cb & c求求b b和和c c的位與的位與| |位或位或b | cb | c求求b b和和c c的位或的位或 位異或位異或b cb c求求b b和和c c的位異或的位異或運(yùn)算符運(yùn)算符名名稱(chēng)稱(chēng)例例子子功功能能 位反位反 b b求求b b的位反的位反& &位與位與b & cb & c求求b b和和c c的位與的位與| |位或位或b | cb | c求求b b和和c c的位或的位或 位異或位異或b cb c求求b b和和c c的位異或的位異或運(yùn)算符運(yùn)算符運(yùn)算符運(yùn)算符名名稱(chēng)稱(chēng)名名稱(chēng)稱(chēng)例例子子例例子子功功能能功功能能 位反位反位反

3、位反 b b b b求求b b的位反的位反求求b b的位反的位反& & & &位與位與位與位與b & cb & cb & cb & c求求b b和和c c的位與的位與求求b b和和c c的位與的位與| | | |位或位或位或位或b | cb | cb | cb | c求求b b和和c c的位或的位或求求b b和和c c的位或的位或 位異或位異或位異或位異或b cb cb cb c求求b b和和c c的位異或的位異或求求b b和和c c的位異或的位異或1位反運(yùn)算位反運(yùn)算位反運(yùn)算是單項(xiàng)運(yùn)算,它是把一個(gè)操作數(shù)按位反運(yùn)算是單項(xiàng)運(yùn)算,它是把一個(gè)操作數(shù)按位求反,即操作數(shù)的各個(gè)二進(jìn)制位為位求反,即操作數(shù)的各

4、個(gè)二進(jìn)制位為1 1時(shí)變換時(shí)變換為為0 0,為,為0 0時(shí)變換成時(shí)變換成1 1。例例10-110-1:將變量:將變量a a按位求反賦予變量按位求反賦予變量b b。 void main()void main() unsigned char a, b; unsigned char a, b; a=0 x9a; b=a; a=0 x9a; b=a; printf(a:0 x%x b:0 x%xn,a,b); printf(a:0 x%x b:0 x%xn,a,b); void main()void main()unsigned char a, b;unsigned char a, b;a=0 x9a;

5、 b=a;a=0 x9a; b=a;printf(a:0 x%x b:0 x%xprintf(a:0 x%x b:0 x%x n,a,b);n,a,b); 10011010a1001101010011010a運(yùn)行結(jié)果:運(yùn)行結(jié)果:a:0 x9a b:0 x65a:0 x9a b:0 x6501100101bb=a0110010101100101bb=a2位與、位或和位異或是對(duì)兩個(gè)操作數(shù)的對(duì)位與、位或和位異或是對(duì)兩個(gè)操作數(shù)的對(duì)應(yīng)二進(jìn)制位進(jìn)行運(yùn)算。應(yīng)二進(jìn)制位進(jìn)行運(yùn)算。a a位位b b位位a &b a &b 位與位與a|b a|b 位或位或ab ab 位異或位異或1 11 10 00 01 10 01

6、 10 01 10 00 00 01 11 11 10 00 01 11 10 0a a位位b b位位a &b a &b 位與位與a|b a|b 位或位或ab ab 位異或位異或1 11 10 00 01 10 01 10 01 10 00 00 01 11 11 10 00 01 11 10 0a a位位a a位位b b位位b b位位a &b a &b 位與位與a &b a &b 位與位與a|b a|b 位或位或a|b a|b 位或位或ab ab 位異或位異或ab ab 位異或位異或1 11 10 00 01 11 10 00 01 10 01 10 01 10 01 10 01 10 00

7、 00 01 10 00 00 01 11 11 10 01 11 11 10 00 01 11 10 00 01 11 10 0位位 邏邏 輯輯 運(yùn)運(yùn) 算算 種種 類(lèi)類(lèi)例例10-2:位邏輯運(yùn)算。:位邏輯運(yùn)算。void main()void main()unsigned char a, b;unsigned char a, b;a=0 xb9;a=0 xb9;b=0 x83;b=0 x83;printf(a and b:0 x%xprintf(a and b:0 x%x n,a&b);n,a&b);printf(a and b:0 x%xprintf(a and b:0 x%x n,a|b);

8、n,a|b);printf(a and b:0 x%xprintf(a and b:0 x%x n,ab);n,ab); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: a and b:0 x81a and b:0 x81 a and b:0 xbba and b:0 xbb a and b:0 x3aa and b:0 x3a 10111001a:0 xb910000011b:0 x83a&b10000001結(jié)果結(jié)果:0 x811011100110111001a:0 xb91000001110000011b:0 x83a&b1000000110000001結(jié)果結(jié)果:0 x8110111001a:0 xb9100000

9、11b:0 x83a|b10111011結(jié)果結(jié)果:0 xbb1011100110111001a:0 xb91000001110000011b:0 x83a|b1011101110111011結(jié)果結(jié)果:0 xbb0011101000111010結(jié)果結(jié)果:0 x3a1011100110111001a:0 xb91000001110000011b:0 x83ab注意:注意: 對(duì)一個(gè)操作數(shù)的位運(yùn)算并不改變操作對(duì)一個(gè)操作數(shù)的位運(yùn)算并不改變操作數(shù)本身的數(shù)值。數(shù)本身的數(shù)值。 二、移位操作二、移位操作移位操作是對(duì)操作數(shù)以二進(jìn)制位(移位操作是對(duì)操作數(shù)以二進(jìn)制位(bitbit)為為單位進(jìn)行左移或右移。它們是雙目運(yùn)

10、算符。單位進(jìn)行左移或右移。它們是雙目運(yùn)算符。形式:形式:操作數(shù)移位運(yùn)算符移動(dòng)的操作數(shù)移位運(yùn)算符移動(dòng)的位位數(shù)數(shù)運(yùn)運(yùn)算算種種類(lèi)類(lèi)運(yùn)算符運(yùn)算符名稱(chēng)名稱(chēng)例子例子運(yùn)算功能運(yùn)算功能右移位右移位b3b3b b右移右移3 3位位左移位左移位c2c右移位右移位b3b3b b右移右移3 3位位左移位左移位c2c右移位右移位右移位右移位b3b3b3b3b b右移右移3 3位位b b右移右移3 3位位左移位左移位左移位左移位c2c2c2c2b b左移左移2 2位位b b左移左移2 2位位例例10-3:左移位操作。:左移位操作。void main()void main()unsigned char a, b;unsig

11、ned char a, b;a=0 x1b; a=0 x1b; b=a2;b=a2;printf(0 x%x left_shift 2 bit:0 x%xprintf(0 x%x left_shift 2 bit:0 x%x n,a,b);n,a,b); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:0 0 x1b left_shift 2 bit:0 x6cx1b left_shift 2 bit:0 x6c00011011a:0 x1b01101100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a20001101100011011a:0 x1b0110110001101100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a2說(shuō)明:說(shuō)明:

12、1) 左移位操作中,操作數(shù)移位后,右端出現(xiàn)左移位操作中,操作數(shù)移位后,右端出現(xiàn)的空格補(bǔ)的空格補(bǔ)0,而移至左端之外的位舍去,不,而移至左端之外的位舍去,不管其是否為符號(hào)位。管其是否為符號(hào)位。00011011a:0 x1b01101100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a20001101100011011a:0 x1b0110110001101100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a2說(shuō)明:說(shuō)明:2) 每向左移一位,相當(dāng)于該數(shù)乘每向左移一位,相當(dāng)于該數(shù)乘2。3)3) 右移位操作與操作數(shù)的數(shù)據(jù)類(lèi)型是否帶有右移位操作與操作數(shù)的數(shù)據(jù)類(lèi)型是否帶有符號(hào)有關(guān):符號(hào)有關(guān):00011011a:0 x1b011

13、01100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a20001101100011011a:0 x1b0110110001101100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a2 不帶符號(hào)的操作數(shù)右移位時(shí),左端出現(xiàn)的空不帶符號(hào)的操作數(shù)右移位時(shí),左端出現(xiàn)的空位補(bǔ)零。位補(bǔ)零。 帶符號(hào)的操作數(shù)右移位時(shí),左端出現(xiàn)的空位帶符號(hào)的操作數(shù)右移位時(shí),左端出現(xiàn)的空位按原最左端的位復(fù)制,無(wú)論什么操作數(shù),移按原最左端的位復(fù)制,無(wú)論什么操作數(shù),移出右端的位被舍棄。出右端的位被舍棄。00011011a:0 x1b01101100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a20001101100011011a:0 x1b01101100011

14、01100b:0 x6c舍棄舍棄補(bǔ)零補(bǔ)零b=a2 );printf(unsigned b right_shift 2 bit:%dn, b2 );運(yùn)行結(jié)果:運(yùn)行結(jié)果:signed a right_shiftsigned a right_shift 2 bit:-2 2 bit:-2unsigned b right_shiftunsigned b right_shift 2 bit:62 2 bit:62char a=-8;負(fù)數(shù)補(bǔ)碼存儲(chǔ)負(fù)數(shù)補(bǔ)碼存儲(chǔ)11111000111110001111111011111110舍棄舍棄復(fù)制復(fù)制a2 帶符號(hào)的操作數(shù)右移位時(shí),左端出現(xiàn)的空位帶符號(hào)的操作數(shù)右移位時(shí),左

15、端出現(xiàn)的空位按原最左端的符號(hào)位復(fù)制,無(wú)論什么操作數(shù),按原最左端的符號(hào)位復(fù)制,無(wú)論什么操作數(shù),移出右端的位被舍棄。移出右端的位被舍棄。不帶符號(hào)的操作數(shù)右移位時(shí),左端出現(xiàn)的空不帶符號(hào)的操作數(shù)右移位時(shí),左端出現(xiàn)的空位補(bǔ)零。位補(bǔ)零。unsigned char b=24811111000111110000011111000111110舍棄舍棄補(bǔ)零補(bǔ)零b2unsigned char b=24811111000111110000011111000111110舍棄舍棄補(bǔ)零補(bǔ)零b2說(shuō)明:說(shuō)明:4) 每右移一位相當(dāng)于操作數(shù)除每右移一位相當(dāng)于操作數(shù)除2。5) a2,b2形式形式的的操作并操作并不不改變操作數(shù)改變操作

16、數(shù)a,b的值;若的值;若a= a2, b= b2則不同。則不同。三、位操作賦值運(yùn)算(復(fù)合位運(yùn)算)三、位操作賦值運(yùn)算(復(fù)合位運(yùn)算)運(yùn)算符運(yùn)算符名名稱(chēng)稱(chēng)例例子子等價(jià)于等價(jià)于&=&=位與賦值位與賦值a&=ba&=ba=a&ba=a&b|=|=位或賦值位或賦值a|=ba|=ba=a|ba=a|b=位異或賦值位異或賦值a=ba=ba=aba=ab=右移賦值右移賦值a=ba=ba=aba=ab=左移賦值左移賦值a=ba=ba=aba=a=右移賦值右移賦值a=ba=ba=aba=ab=左移賦值左移賦值a=ba=ba=aba=a=右移賦值右移賦值右移賦值右移賦值a=ba=ba=ba=ba=aba=aba=ab

17、a=ab=左移賦值左移賦值左移賦值左移賦值a=ba=ba=ba=ba=aba=aba=aba=a n1; c = ( 0 n1b=value n10 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 00 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 40 41 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0

18、0 0c=(0 4 )c=(0 4 )0 0 0 0 0 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 1 1 1 1b b 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 00 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0c c 0 0 0 0 0 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 1 1 1 1d=b&cd=b&c0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 00

19、0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0四、位段四、位段就是以位(就是以位(bitbit)位單位定義長(zhǎng)度的結(jié)構(gòu)體類(lèi)型成員。位單位定義長(zhǎng)度的結(jié)構(gòu)體類(lèi)型成員。說(shuō)明:說(shuō)明:1)1) 具體使用中應(yīng)注意成員的所占位,即長(zhǎng)度,及其由具體使用中應(yīng)注意成員的所占位,即長(zhǎng)度,及其由長(zhǎng)度限定的存取值域。長(zhǎng)度限定的存取值域。2)2) 一個(gè)位段必須分配在同一個(gè)存儲(chǔ)單元之中,不能跨一個(gè)位段必須分配在同一個(gè)存儲(chǔ)單元之中,不能跨兩個(gè)單元,可以?xún)蓚€(gè)單元,可以u(píng)nsigned:0 unsigned:0 實(shí)現(xiàn)從下以個(gè)存儲(chǔ)單實(shí)現(xiàn)從下以個(gè)存儲(chǔ)單元開(kāi)始存放。元開(kāi)始存放。3)3) 位段可在數(shù)值表達(dá)式中引用,并由系統(tǒng)自動(dòng)轉(zhuǎn)換為位段可在數(shù)值表達(dá)式中引用,并由系統(tǒng)自動(dòng)轉(zhuǎn)換為整形數(shù),可用整形噶式輸出。整形數(shù),可用整形噶式輸出。例例1-6:位段運(yùn)算。:位段運(yùn)算。void main()void main()struct packed_datestruct packed_dateunsigned a:2;unsigned a:2;/結(jié)構(gòu)成員位段結(jié)構(gòu)成員位段a a所占位所占位2 2unsigned b:6;unsigned b:6;/結(jié)構(gòu)成員位段結(jié)構(gòu)成員位段b b所占位所占

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論