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

下載本文檔

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

文檔簡(jiǎn)介

1、本章導(dǎo)讀 本章是初學(xué)C語(yǔ)言者的一大難點(diǎn),屬較高要求,適合于編寫系統(tǒng)軟件的需要。讀者應(yīng)在掌握了計(jì)算機(jī)的幾種基本數(shù)值編碼的基礎(chǔ)上,開始本章的學(xué)習(xí)。通過本章的學(xué)習(xí)我們將近一步體會(huì)到C語(yǔ)言既具有高級(jí)語(yǔ)言的特點(diǎn),又具有低級(jí)語(yǔ)言的功能,它能直接對(duì)計(jì)算機(jī)的硬件進(jìn)行操作,因而它具有廣泛的用途和很強(qiáng)的生命力。 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回本書目錄第5章 位運(yùn)算本章主要知識(shí)點(diǎn) (1) 位運(yùn)算符的含義及使用 (2) 位運(yùn)算的特殊應(yīng)用 (3) 位復(fù)合賦值運(yùn)算符的含義及使用本章導(dǎo)讀 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0第5章 位運(yùn)算 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返

2、回本章導(dǎo)讀5.1 位運(yùn)算的C程序?qū)嵗?.2 二進(jìn)制位運(yùn)算5.3 綜合實(shí)訓(xùn)第5章 位運(yùn)算 C語(yǔ)言程序設(shè)計(jì) (Visual C+ C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回本節(jié)目錄程序演示【例5.1】編寫程序完成對(duì)兩個(gè)整型量進(jìn)行按位邏輯運(yùn)算。程序名為5_1.cpp。#include stdio.hmain() int a,b;printf(input the numbers: );scanf(%d,%d,&a,&b);printf(%dn,a&b); /*輸出按位與結(jié)果*/printf(%dn,a|b); /*輸出按位或結(jié)果*/printf(%dn,ab); /*輸出按位異或結(jié)果*/p

3、rintf(%un,a); /*輸出 a的按位取反結(jié)果*/運(yùn)行情況為:input the numbers: 輸入:9,5 1131242949672865.1 位運(yùn)算的C程序?qū)嵗?C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返例5.1程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回本節(jié)目錄例5.1程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回本 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回本章目錄5.2 二進(jìn)制位運(yùn)算5.2.1 二進(jìn)制位運(yùn)算5.2.2 位復(fù)合賦值運(yùn)算符所謂位運(yùn)算是指進(jìn)行二進(jìn)制位的運(yùn)算。在系統(tǒng)軟件中,常要處理二進(jìn)制位的問題。C語(yǔ)言提供了按位運(yùn)算的功能,這使得它與其它

4、高級(jí)語(yǔ)言相比,具有很強(qiáng)的優(yōu)越性。 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)5.2.1 二進(jìn)制位運(yùn)算類 型運(yùn)算符含義位邏輯運(yùn)算符&按位與|按位或按位異或取反移位運(yùn)算 符右移語(yǔ)言提供了六種位運(yùn)算符(見表5-1):表5-1位邏輯運(yùn)算與移位運(yùn)算返回本節(jié)目錄 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)5 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)5.2.1 二進(jìn)制位運(yùn)算說明:運(yùn)算量只能是整型或字符型的數(shù)據(jù),不能為實(shí)型或結(jié)構(gòu)體等類型的數(shù)據(jù)。六個(gè)位運(yùn)算符的優(yōu)先級(jí)由高到低依次為:取反、左移和右移、按位與、按位異或、按位或。兩個(gè)不同

5、長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算時(shí),系統(tǒng)會(huì)將二者按右端對(duì)齊。下面對(duì)各種位運(yùn)算符介紹如下:返回本節(jié)目錄1“按位與”運(yùn)算符(&)2“按位或”運(yùn)算符(|)3“按位異或”運(yùn)算符()4“求反”運(yùn)算符 ()5“左移”運(yùn)算符() C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)5 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)1“按位與”運(yùn)算符(&)(1)規(guī)則:參與運(yùn)算的兩數(shù)(以補(bǔ)碼方式出現(xiàn))各對(duì)應(yīng)的二進(jìn)位相與(即邏輯乘),只有對(duì)應(yīng)的兩個(gè)二進(jìn)位均為1時(shí),結(jié)果位才為1,否則為0,它是雙目運(yùn)算符。即:0&0=0;0&1=0;1&0=0;1&1=1。例如:9&5可寫算式如下:9的二進(jìn)制補(bǔ)碼: 0 0 0 0 1 0 0

6、 15的二進(jìn)制補(bǔ)碼: 0 0 0 0 0 1 0 1 & _ 0 0 0 0 0 0 0 1(1的二進(jìn)制補(bǔ)碼)可見9&5=1。返回5.2.1目錄 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)1 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)1“按位與”運(yùn)算符(&)(2)特殊用途:清零按位與運(yùn)算通常用來對(duì)某些位清0。由按位與的規(guī)則可知:為了使某數(shù)的指定位清零,可將該數(shù)按位與一特定數(shù)。該數(shù)中為1的位,特定數(shù)中相應(yīng)位應(yīng)為0;該數(shù)中為0的位,特定數(shù)中相應(yīng)位可以為0也可以為1。由此可見,能對(duì)某一個(gè)數(shù)的指定位清零的數(shù)并不唯一。 【例5.2】取一個(gè)數(shù)中某些位可將該數(shù)與一個(gè)特定數(shù)進(jìn)行&運(yùn)算,對(duì)于要取

7、的那些位,特定數(shù)中相應(yīng)的位設(shè)為1?!纠?.3】取出數(shù)中某一位要相將一個(gè)數(shù)的某一位保留下來,可將該數(shù)與一個(gè)特定數(shù)進(jìn)行&運(yùn)算,特定數(shù)的相對(duì)應(yīng)的那位應(yīng)為1?!纠?.4】返回本節(jié)目錄 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)1【例5.2】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回1目錄程序演示【例5.2】對(duì)原數(shù)00110110中為1的位清零。原數(shù)補(bǔ)碼: 0 0 1 1 0 1 1 0清零的數(shù): 1 1 0 0 0 0 0 0 (或01000000、00000000等) & _ 0 0 0 0 0 0 0 0 程序可寫為:#include stdio.hmain() int

8、a=0 x36,b=0 xc0,c; c=a&b; printf(a=%xnb=%xnc=%xn,a,b,c);運(yùn)行情況為:a=36b=c0c=0 【例5.2】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+例5.2程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回1目錄例5.2程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回1【例5.3】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回1目錄程序演示【例5.3】把a(bǔ)的高八位清0,保留低八位。可作a&255運(yùn)算(255的二進(jìn)制數(shù)為0000000011111111)。#include stdio.hmain() int a,b=255,c; sc

9、anf(%d,&a); c=a&b; printf(a=%xnb=%xnc=%xn,a,b,c); 運(yùn)行情況為:輸入:920a=398b=ffc=98 【例5.3】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+例5.3程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回1目錄例5.3程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回1【例5.4】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回1目錄程序演示【例5.4】編寫程序?qū)(=9)的最低位取出。程序名為5_4cpp。#include stdio.hmain() int a=9,b=1,c; c=a&b; printf(a=%xnb=%xn

10、c=%xn,a,b,c);運(yùn)行情況為:a=9b=1c=1【例5.4】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+例5.4程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回1目錄例5.4程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回1 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)2“按位或”運(yùn)算符(|)(1)規(guī)則參與運(yùn)算的兩數(shù)(以補(bǔ)碼出現(xiàn))各對(duì)應(yīng)的二進(jìn)位相或(即邏輯加)。只要對(duì)應(yīng)的兩個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1,它是雙目運(yùn)算符。即:0|0=0;0|1=1;1|0=1;1|1=1。例如:9|5可寫算式如下:0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 | _ 0 0 0 0

11、 1 1 0 1 (十進(jìn)制為13)可見9|5=13。(2)特殊用途將一個(gè)數(shù)據(jù)的某些指定的位置為1。將該數(shù)按位或一個(gè)特定的數(shù),該特定的數(shù)的相應(yīng)位置為1。【例5.5】返回5.2.1目錄 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)2【例5.5】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回2目錄【例5.5】將一個(gè)數(shù)的低5位置為1。程序名為5_5.cpp。只需將該數(shù)與“00011111”進(jìn)行|運(yùn)算。如: # # # # # # # # (#可代表0或1) 0 0 0 1 1 1 1 1 | _ # # # 1 1 1 1 1 #include stdio.hmain() int

12、a,b=31,c; scanf(%d,&a); c=a|b; printf(a=%xnb=%xnc=%xn,a,b,c);運(yùn)行情況為:輸入:5a=5b=1fc=1f程序演示【例5.5】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+例5.5程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回2目錄例5.5程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回2 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)3“按位異或”運(yùn)算符()(1)規(guī)則參與運(yùn)算的兩數(shù)(以補(bǔ)碼出現(xiàn))各對(duì)應(yīng)的二進(jìn)位相異或,當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1,它是雙目運(yùn)算符。即:00=0;01=1;10=1;11=0。例如:95可寫成算式如下:0

13、 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 _ 0 0 0 0 1 1 0 0 (十進(jìn)制為12) 可見95=12。(2)特殊用途使特定位翻轉(zhuǎn) 【例5.6】要使哪幾位翻轉(zhuǎn)就將與其進(jìn)行“按位異或”運(yùn)算的數(shù)的相應(yīng)位置為1。使特定位保留原值要使哪幾位保留原值就將與其進(jìn)行“按位異或”運(yùn)算的數(shù)的相應(yīng)位置為0。交換兩個(gè)值,不用臨時(shí)變量 【例5.7】返回5.2.1目錄 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)3【例5.6】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回3目錄【例5.6】將01110001的低4 位翻轉(zhuǎn),高4位保留原值。 0 1 1 1 0 0 0 1

14、0 0 0 0 1 1 1 1 _ 0 1 1 1 1 1 1 0 (十進(jìn)制126)程序可寫為:#include stdio.hmain() int a=0 x71,b=0 xf,c; c=ab; printf(a=%xnb=%xnc=%xn,a,b,c);運(yùn)行情況為:a=71b=fc=7e程序演示【例5.6】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+例5.6程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回3目錄例5.6程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回3【例5.7】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境) 【例5.7】設(shè)有整型數(shù) a=5,b=7。編寫程序利用位運(yùn)算,

15、將a和b的值互換。 程序中,通過順序使用a=ab;b=ba;a=ab;三個(gè)賦值語(yǔ)句將兩變量a、b的值互換。具體計(jì)算過程如下:第一步: a 0000000000000101 b 0000000000000111 a=ab 0000000000000010第二步: a 0000000000000010 b 0000000000000111 b=ba 0000000000000101 (b的值為5)第三步: a 0000000000000010 b 0000000000000101 a=ab 0000000000000111 (a的值為7)返回3目錄【例5.7】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual

16、C+【例5.7】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)程序名為5_7.cpp。#include stdio.hmain() int a=5,b=7; printf(a=%d,b=%dn,a,b); a=ab;b=ba;a=ab; printf(a=%d,b=%dn,a,b);運(yùn)行情況為:a=5,b=7a=7,b=5程序演示返回3目錄【例5.7】實(shí)例 C語(yǔ)言程序設(shè)計(jì) (Visual C+例5.7程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回3目錄例5.7程序演示輸入源程序彈出運(yùn)行結(jié)果窗口返回例題返回3 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)4“求反”運(yùn)算符 ()(1

17、)規(guī)則對(duì)參與運(yùn)算的數(shù)的各二進(jìn)位按位求反,它是單目運(yùn)算符,具有右結(jié)合性。即:0=1;1=0。例如:9的運(yùn)算為0000000000001001 _1111111111110110 (2)用途適當(dāng)?shù)氖褂每稍黾映绦虻囊浦残浴H缫獙⒄麛?shù)a的最低位置為0,我們通常采用語(yǔ)句a=a&1;來完成,因?yàn)檫@樣對(duì)a是16位數(shù)還是32位數(shù)均不受影響。返回5.2.1目錄 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)4 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)5“左移”運(yùn)算符() (1)規(guī)則把“”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0,它是雙目運(yùn)算符。例如:a

18、)(1)規(guī)則把“”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“”右邊的數(shù)指定移動(dòng)的位數(shù)。(2)特殊用途右移1位相當(dāng)于該數(shù)除以2;右移n位相當(dāng)于該數(shù)除以2n。(3)說明對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)0;而為負(fù)數(shù)時(shí),符號(hào)位為1,最高位是補(bǔ)0還是補(bǔ)1取決于計(jì)算機(jī)系統(tǒng)的規(guī)定。移入0的稱為“邏輯右移”;移入1的稱為“算術(shù)右移”。我們可以通過編寫程序來驗(yàn)正所使用的系統(tǒng)是采用“邏輯右移”還是“算術(shù)右移”。很多系統(tǒng)規(guī)定為補(bǔ)1,即“算術(shù)右移”。如: a: 1001011111101101a1: 0100101111110110 ( 邏輯右移)a1: 1100101111110110

19、( 算術(shù)右移)返回5.2.1目錄 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)6 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回本節(jié)目錄5.2.2 位復(fù)合賦值運(yùn)算符位運(yùn)算符與賦值運(yùn)算符結(jié)合組成位復(fù)合賦值運(yùn)算符。位復(fù)合賦值運(yùn)算符與算術(shù)復(fù)合賦值運(yùn)算符相似,它們的運(yùn)算級(jí)別較低,僅高于逗號(hào)運(yùn)算符,是自右而左的結(jié)合性。1分類位復(fù)合賦值運(yùn)算符如表5-2所示:2運(yùn)算過程(1)先對(duì)兩個(gè)操作數(shù)進(jìn)行位操作。(2)再將結(jié)果賦予第一個(gè)操作數(shù)(因此第一個(gè)操作數(shù)必須是變量)。如:a&=2;表示a=a&2;。 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返 C語(yǔ)言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境)返回5.2.2目錄表5-2 位復(fù)合賦值運(yùn)算符運(yùn)算符名稱例子等價(jià)于&=位與賦值a&=ba=a&b|=位或賦值a|=ba=a|b=位異或賦值a=ba=ab=右移賦值a=ba=ab=左移賦值a=ba=a5”改成 “am”,且將“(03)”改成“(05; c=(04); d=b&c; printf(a=%xtd=%xn,a,d);運(yùn)行情況如下:inpu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論