《C語言程序設(shè)計(jì)》課件2第3章_第1頁
《C語言程序設(shè)計(jì)》課件2第3章_第2頁
《C語言程序設(shè)計(jì)》課件2第3章_第3頁
《C語言程序設(shè)計(jì)》課件2第3章_第4頁
《C語言程序設(shè)計(jì)》課件2第3章_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章數(shù)據(jù)運(yùn)算3.1算術(shù)運(yùn)算3.2自增(減)運(yùn)算3.3關(guān)系運(yùn)算3.4邏輯運(yùn)算3.5賦值運(yùn)算3.6逗號運(yùn)算3.7條件運(yùn)算3.8位運(yùn)算3.9測試數(shù)據(jù)長度運(yùn)算習(xí)題3

本章學(xué)習(xí)要求:

1.掌握C語言各種運(yùn)算符的使用與優(yōu)先級。

2.掌握表達(dá)式的概念、運(yùn)算符的優(yōu)先級與結(jié)合性。

3.不同運(yùn)算符(算術(shù)、自增和自減運(yùn)算符、關(guān)系、邏輯運(yùn)算符等)的使用特點(diǎn),清楚每種運(yùn)算符的優(yōu)先級與結(jié)合性。

4.了解測試數(shù)據(jù)長度運(yùn)算sizeof()。

運(yùn)算符是告訴編譯程序執(zhí)行特定算術(shù)或邏輯等操作的符號。

C語言提供了很豐富的運(yùn)算符,主要有以下幾類:

(1)算術(shù)運(yùn)算符。

(2)自增(減)運(yùn)算符。

(3)關(guān)系運(yùn)算符。

(4)邏輯運(yùn)算符。

(5)賦值運(yùn)算符。

(6)逗號運(yùn)算符。

(7)條件運(yùn)算符。

(8)位運(yùn)算符。

(9)測試數(shù)據(jù)長度運(yùn)算符sizeof。

另外,C語言還提供了一些用于完成特殊操作的運(yùn)算符。

由運(yùn)算符和操作數(shù)所組成的式子,稱為表達(dá)式。只需一個(gè)操作數(shù)的運(yùn)算符稱為單目運(yùn)算符,需要兩個(gè)操作數(shù)的運(yùn)算符稱為雙目運(yùn)算符。操作數(shù)可以是常量、變量、函數(shù)和子表達(dá)式,每個(gè)表達(dá)式都有唯一確切的值,求解表達(dá)式時(shí)要注意運(yùn)算符的優(yōu)先級及結(jié)合性。在下面各節(jié)內(nèi)容中,將詳細(xì)講解各運(yùn)算符及其運(yùn)算表達(dá)式。

算術(shù)運(yùn)算是兩個(gè)運(yùn)算對象(也稱操作數(shù))之間的運(yùn)算。表3.1列出了C語言允許的算術(shù)運(yùn)算符。

在C語言中,運(yùn)算符+、-、*

/

的用法與大多數(shù)計(jì)算機(jī)語言是相同的。它們幾乎用于C語言中所有的數(shù)據(jù)類型。3.1算術(shù)運(yùn)算

表3.1算術(shù)運(yùn)算符說明:

(1)當(dāng)“/”被用于整型或字符型數(shù)據(jù)時(shí),結(jié)果取整。例如:在整數(shù)除法中,10/3

=

3。

(2)因?yàn)槿∮噙\(yùn)算是取整數(shù)除法的余數(shù),所以%不能用于除整型之外的其他類型的數(shù)據(jù),要求%兩側(cè)均為整型數(shù)據(jù),如7%3

=

1。

(3)用算術(shù)運(yùn)算符和括號將運(yùn)算對象連接起來。符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如a

+

b/c*d,就是一個(gè)合法的C算術(shù)表達(dá)式。

(4)

C語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。在表達(dá)式求值時(shí),先按照運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減;如果一個(gè)運(yùn)算對象兩側(cè)的運(yùn)算符的優(yōu)先級別相同,例如b/c*d,則按規(guī)定的結(jié)合方向處理。C語言規(guī)定,算術(shù)運(yùn)算符的結(jié)合方向?yàn)?/p>

“自左至右”,即“左結(jié)合性”。

自增(減)運(yùn)算是對一個(gè)運(yùn)算對象施行的一種特殊的算術(shù)運(yùn)算,即對一個(gè)運(yùn)算對象進(jìn)行算術(shù)運(yùn)算之后,運(yùn)算結(jié)果仍賦予該運(yùn)算對象。因此,參加自增(減)運(yùn)算的運(yùn)算對象必須是變量。表3.2列出了C語言的自增(減)運(yùn)算符。3.2自增(減)運(yùn)算

表3.2自增(減)運(yùn)算符說明:

(1)參加自增(減)運(yùn)算的運(yùn)算對象必須是整型變量。2++或(a+3)--都是不合法的。

(2)自增和自減運(yùn)算符可用在運(yùn)算對象之前(稱為前置運(yùn)算),也可放在其后(稱為后置運(yùn)算)。例如:

a

=

a

+

1;可以寫成a++;或++a;

a

=

a

-1;可以寫成a--;或--a;

(3)當(dāng)自增或自減運(yùn)算符與運(yùn)算對象變量組成的運(yùn)算表達(dá)式單獨(dú)組成一條語句時(shí),無論是前置運(yùn)算,還是后置運(yùn)算,其結(jié)果是一樣的,即都是使該變量的值增加1或減少1。例如:

inta=1;

a++;

即執(zhí)行后變量a的值為2。

如果寫成:

inta=1;

++a;

則執(zhí)行后變量a的值仍為2。

(4)當(dāng)自增或自減運(yùn)算符與其他運(yùn)算符混合使用時(shí),前置和后置用法是有區(qū)別的。

前置運(yùn)算:自增或自減運(yùn)算符在變量之前,C語言先執(zhí)行對該變量的加1或減1操作,然后引用變量的數(shù)值作為整個(gè)自增或自減表達(dá)式的值。后置運(yùn)算:自增或自減運(yùn)算符在變量之后,C語言先引用變量的數(shù)值作為整個(gè)自增或自減表達(dá)式的值,然后執(zhí)行對該變量的加1或減1操作。例如:

inta=1;

printf(“%d”,a++);

即執(zhí)行后變量a的值為2,輸出為1。

如果寫成:

inta=1;

printf(“%d”,++a);

則執(zhí)行后變量a的值仍為2,輸出為2。

可以看出,無論是前置運(yùn)算還是后置運(yùn)算,對自增或自減運(yùn)算的對象變量而言,都要執(zhí)行一次自增或自減運(yùn)算,效果是一致的。所不同的是,自增或自減運(yùn)算表達(dá)式的取值是變量自增(減)之前的值,還是變量自增(減)之后的值。

(5)

++和--的結(jié)合方向是“自右至左”。

在大多數(shù)C編譯程序中,為自增和自減運(yùn)算符生成的程序代碼比為等價(jià)的賦值語句生成的代碼運(yùn)算速度要快得多,因此盡可能采用++或--運(yùn)算符是一種比較好的程序設(shè)計(jì)做法。

關(guān)系運(yùn)算是對兩個(gè)運(yùn)算對象進(jìn)行大小關(guān)系的比較。表3.3列出了C語言提供的關(guān)系運(yùn)算符。3.3關(guān)系運(yùn)算

表3.3關(guān)系運(yùn)算符說明:

(1)前四種關(guān)系運(yùn)算符(>,<,>=,<=)的優(yōu)先級別相同,后兩種(==和!=)也相同。前四種運(yùn)算符的優(yōu)先級別高于后兩種。如“>”與“<”優(yōu)先級相同,比“==”優(yōu)先級高。

例如:a==b>c等價(jià)于a==(b>c)。

(2)關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符。例如:a>b+c等價(jià)于a>(b+c)。

(3)關(guān)系運(yùn)算符及相應(yīng)操作數(shù)組成的式子稱為關(guān)系表達(dá)式,其中操作數(shù)可以是常量、變量及子表達(dá)式(可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式等)。

例如,以下都是合法的關(guān)系表達(dá)式:

a>b,a+b>c-d,(a=1)>2,'a'=='b',(a>b)>c

(4)關(guān)系表達(dá)式的值是一個(gè)邏輯值,即true(真)或false(假)。在C語言中,關(guān)系表達(dá)式的值在取得true時(shí)為1,在取得false時(shí)為0。

例如:當(dāng)a=1,b=2時(shí),表達(dá)式a>b的值為0;表達(dá)式a<b的值為1。

又如:a=3,b=2,c=1,求解表達(dá)式a==b>c時(shí),按照優(yōu)先級高低,先計(jì)算b>c,得到結(jié)果為1,再計(jì)算a==1,得到最終結(jié)果為0。

(5)在等優(yōu)先級的情況下,關(guān)系運(yùn)算的結(jié)合性是“自左至右”。

例如,表達(dá)式a>b>c的求值應(yīng)自左至右進(jìn)行,即等價(jià)于(a>b)>c。當(dāng)a=3,b=2,c=1時(shí),表達(dá)式的最終計(jì)算結(jié)果為0。

用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來就是邏輯表達(dá)式。表3.4列出了C語言的邏輯運(yùn)算符。表3.5為邏輯運(yùn)算的“真值表”,表示當(dāng)a和b的值為不同組合時(shí),各種邏輯運(yùn)算的結(jié)果。3.4邏輯運(yùn)算

表3.4邏輯運(yùn)算符表3.5邏輯運(yùn)算真值表說明:

(1)三個(gè)邏輯運(yùn)算符中,“!”的優(yōu)先級高于算術(shù)運(yùn)算符,而“&&”和“||”的優(yōu)先級低于關(guān)系運(yùn)算符。例如:

(a>b)&&(c<d) 等價(jià)于a>b&&c<d

(!a)||(a>b) 等價(jià)于!a||a>b

(2)

C語言編譯系統(tǒng)在給出邏輯運(yùn)算結(jié)果時(shí),用1代表“真”,用0代表“假”。但在判斷運(yùn)算對象是“真”是“假”時(shí),用非0代表“真”,用0代表“假”。

例如,若a=2,b=1,c=0,則:

!a的值為0。

因?yàn)閍的值為非0值,

被認(rèn)為是“真”,進(jìn)行“非”運(yùn)算后,得到“假”,而運(yùn)算結(jié)果“假”用0表示。

a&&b的值為1。因?yàn)閍和b均為非0值,都被認(rèn)為是“真”,因此a&&b的值也為“真”,用1表示。

a||c的值為1。因?yàn)閍為非0值,被認(rèn)為是“真”,c為0值,被認(rèn)為是“假”,因此a||c的值為“真”,用1表示。

再如:2&&!4||'f'的值為1。參加邏輯運(yùn)算的運(yùn)算對象不僅可以是0和1,或者是0和非0的數(shù)值,也可以是任何類型的數(shù)據(jù),如字符型、實(shí)型或指針型等。這里,字符'f'的ASCII碼不為0,被認(rèn)為是“真”。

(3)在邏輯表達(dá)式的求解中,并非所有的邏輯運(yùn)算符都能被執(zhí)行到。

a&&b&&c :只有a為真(非0)時(shí),才需要判別b的值;只有a和b都為真時(shí),才需要判別c的值。如果a為假,則不判別b和c的值,整個(gè)表達(dá)式的值為假;如果a為真,b為假,則不判別c,見圖3.1。

a||b||c:只要a為真(非0)時(shí),就不必判別b和c的值,整個(gè)表達(dá)式的值為真;只有a為假時(shí),才需要判別b的值;只有a和b都為假時(shí),才需要判別c的值,見圖3.2。

圖3.1a&&b&&c

圖3.2a||b||c

③例如下面程序:

main()

{ inta=1,b=0,c=0;

if(!(--a&&(b+=a)&&++c))printf("%d,%d,%d

\n",a,b,c);

}

輸出結(jié)果如下:

0,0,0

C語言中,除了有最基本的賦值運(yùn)算符“=”外,還有復(fù)合賦值運(yùn)算符。

1.賦值運(yùn)算符

C語言使用單個(gè)的“=”符號作為賦值運(yùn)算符。

賦值運(yùn)算的一般形式為

變量

=

表達(dá)式

3.5賦值運(yùn)算它的作用是將賦值運(yùn)算符“=”右邊的表達(dá)式的值賦給賦值運(yùn)算符“=”左邊的變量。其中,表達(dá)式可以是簡單的一個(gè)常量或變量,也可以是復(fù)雜的常量、變量及運(yùn)算符的組合。

說明:

(1)當(dāng)賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換,主要有以下幾種情況:

①將實(shí)型數(shù)據(jù)(單、雙精度)賦給整型變量時(shí),舍棄實(shí)數(shù)的小數(shù)部分。如a為整型變量,執(zhí)行“a=2.5”的結(jié)果是使a的值為2。

②將整型數(shù)據(jù)賦給實(shí)型變量(單、雙精度)時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲到變量中。如將3賦給float變量f,即執(zhí)行“f=3”,則先將3轉(zhuǎn)換為3.00000,再存儲在f中。如將3賦給double變量d,即執(zhí)行“d=3”,則先將3補(bǔ)足有效位數(shù)字為3.00000000000000,

然后以雙精度類型存儲到d中。

(2)賦值運(yùn)算符的優(yōu)先級比關(guān)系運(yùn)算符和邏輯運(yùn)算符的優(yōu)先級別低,見圖3.3。

2.復(fù)合賦值運(yùn)算符

在賦值運(yùn)算符“=”之前加上其他運(yùn)算符,就構(gòu)成了復(fù)合賦值運(yùn)算符。一般的二元(二目)運(yùn)算符,都可以與賦值運(yùn)算符一起組合成復(fù)合賦值運(yùn)算符。C語言規(guī)定,可以使用10種復(fù)合賦值運(yùn)算符,即+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。前5種是算術(shù)運(yùn)算符和賦值運(yùn)算符結(jié)合形成的算術(shù)賦值運(yùn)算符,后5種是有關(guān)位操作的,將在3.8節(jié)介紹。

算術(shù)賦值運(yùn)算符如表3.6所示。

表3.6算術(shù)賦值運(yùn)算符說明:

(1)參加算術(shù)賦值運(yùn)算的兩個(gè)運(yùn)算對象,先進(jìn)行算術(shù)運(yùn)算,然后將運(yùn)算結(jié)果賦給第一個(gè)運(yùn)算對象。因此,這組運(yùn)算符要求第一個(gè)運(yùn)算對象必須是變量。

(2)由于復(fù)合賦值運(yùn)算符是賦值運(yùn)算符中的一類,因此其優(yōu)先級別比其他運(yùn)算符低。

例如:

a+=b-1 等價(jià)于 a=a+(b-1)

3.賦值表達(dá)式

由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為賦值表達(dá)式。

(1)對賦值表達(dá)式求解的過程是:將賦值運(yùn)算符右邊的表達(dá)式的值賦給賦值運(yùn)算符左邊的變量。賦值表達(dá)式的值就是被賦值的變量的值。

例如,賦值表達(dá)式

“a

=

1”的值為1,變量a的值也為1。

又如,復(fù)合賦值表達(dá)式a

+

=3的值為變量a在原值上加3以后的值。再如,if((c=getchar())=='')m=1;其中c=getchar()是一個(gè)賦值表達(dá)式,表達(dá)式的值是被賦值的變量c的值,即從鍵盤讀入的一個(gè)字符。整條語句的作用是:如果從鍵盤讀到空格,則將變量m賦值為1。

(2)賦值運(yùn)算符是右結(jié)合性,即在C語言的一個(gè)表達(dá)式中,當(dāng)出現(xiàn)多個(gè)連續(xù)的賦值運(yùn)算符時(shí),運(yùn)算順序是從右向左。例如:a=b=c=0 等價(jià)于a=(b=(c=0)),變量a、b、c的值均為0,表達(dá)式的值為0。

下面是賦值表達(dá)式的例子:

a

=

1

-(b

=

0) 表達(dá)式的值為1,a值為1,b值為0。

a

=

(b

=

1)

+

(c

=

2)表達(dá)式的值為3,a值為3,b值為1,c值為2。

(3)賦值表達(dá)式也可以是復(fù)合賦值運(yùn)算。例如:

a+=a-=a*a如果a的初值為2,此表達(dá)式的求解自右向左進(jìn)行,等價(jià)于a+=(a-=(a*a))。求解步驟如下:①執(zhí)行賦值運(yùn)算(a-a*a),即a=2-2*2,使變量a的值為-2,表達(dá)式(a-=a*a)的值即為被賦值的變量a的值,也為-2;②再執(zhí)行a+=-2,即計(jì)算a=a+(-2),相當(dāng)于a=(-2)+(-2)=-4。因此整個(gè)表達(dá)式a+=a-=a*a的值為-4,變量a的值也為-4。

C語言中,逗號(,)作為一個(gè)運(yùn)算符,可以把幾個(gè)獨(dú)立的運(yùn)算表達(dá)式結(jié)合成一個(gè)運(yùn)算表達(dá)式。這樣的表達(dá)式稱為逗號表達(dá)式。例如:(a

=

1,b

=

2,c

=

3)是一個(gè)由三個(gè)獨(dú)立的運(yùn)算表達(dá)式結(jié)合而成的逗號表達(dá)式。

逗號表達(dá)式的一般形式為

表達(dá)式1,表達(dá)式23.6逗號運(yùn)算逗號表達(dá)式的求解過程為:①求解表達(dá)式1;②求解表達(dá)式2;③將表達(dá)式2的值作為整個(gè)逗號表達(dá)式的值。

例如:表達(dá)式(1,2,3)的值為3;表達(dá)式(1

+

4,3

-2)的值為1。

說明:

(1)逗號表達(dá)式的一般形式可以擴(kuò)展為

表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n

它是依次求解表達(dá)式1至表達(dá)式n的值,整個(gè)逗號表達(dá)式的值為表達(dá)式n的值。

(2)逗號運(yùn)算符在所有運(yùn)算符中級別最低。

例如:(a

=

1,b

=

2,c

=

3)求解后,a值為1,b值為2,c值為3,整個(gè)表達(dá)式的值為3。

又如:表達(dá)式(a

=

1,a

+

2)的值為3,求解后a值為1。

再如:b

=

(a

=

7,a

+

2),b%3求解后,a值為7,b值為9,表達(dá)式的值為0。

條件運(yùn)算符要求有三個(gè)操作對象,稱三目(元)運(yùn)算符,它是C語言中唯一的一個(gè)三目運(yùn)算符。條件運(yùn)算表達(dá)式的一般形式為

表達(dá)式1?表達(dá)式2:表達(dá)式3

它的執(zhí)行過程是:先計(jì)算表達(dá)式1,若它的值為真(非0),則計(jì)算表達(dá)式2,并將表達(dá)式2的值作為整個(gè)表達(dá)式的結(jié)果;否則,若表達(dá)式1的值為0,則計(jì)算表達(dá)式3,并將表達(dá)式3的值作為整個(gè)表達(dá)式的結(jié)果。3.7條件運(yùn)算例如:(x>y)?x:y,結(jié)果為x和y中的較大數(shù)的值。

又如:(x>=0)?x:-x,結(jié)果是x的絕對值。

說明:

(1)條件運(yùn)算符的優(yōu)先級別比關(guān)系運(yùn)算符和算術(shù)運(yùn)算符的低,比賦值運(yùn)算符的高。

例如:max=((x>y)?x:y)中的括號可以省略,寫成max=x>y?x:y。表達(dá)式a>b?

a:b+1則等價(jià)于(a>b)?a:(b+1),而不是(a>b?a:b)+1。

(2)條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆?。例如:a<b?a:b<c?b:c相當(dāng)于a<b?

a:(b<c?b:c)。

(3)表達(dá)式1的類型可以與表達(dá)式2和表達(dá)式3的類型不同。例如:(x=2)?'a':'b'中,表達(dá)式x=2的值的類型為整型,表達(dá)式2和表達(dá)式3的值的類型均為字符型。

(4)條件運(yùn)算表達(dá)式中,表達(dá)式2和表達(dá)式3的類型也可以不同,此時(shí)條件表達(dá)式的值的類型取二者中較高的類型。例如:

(x>y)?1.5:2

如果x>y,則該條件表達(dá)式的值為1.5,否則,表達(dá)式的值為2,但由于1.5是實(shí)型,比整型高,因此將2轉(zhuǎn)換為實(shí)型值2.0。

與其他高級語言不同,C語言支持全部的位運(yùn)算符。位運(yùn)算是對字節(jié)或字中的位進(jìn)行測試、置位或移位處理。C語言提供的位運(yùn)算符如表3.7所示。3.8位運(yùn)算

表3.7位運(yùn)算符說明:

(1)位運(yùn)算符中,除~外,均為二目(元)運(yùn)算符,即要求運(yùn)算符兩側(cè)各有一個(gè)運(yùn)算對象。

(2)位運(yùn)算只能用于整型或字符型的數(shù)據(jù),不能用于實(shí)型數(shù)據(jù)。

(3)位運(yùn)算符可以與賦值運(yùn)算符結(jié)合,組成位復(fù)合賦值運(yùn)算符,有<<=,>>=,&=,^=,|=。

下面依次介紹幾種位運(yùn)算符,以及位復(fù)合賦值運(yùn)算符。

1.取反運(yùn)算

取反運(yùn)算符(~)為單目運(yùn)算符,其優(yōu)先級別與其他單目運(yùn)算符相同,并且同級時(shí)自右向左結(jié)合。

取反運(yùn)算符將每個(gè)二進(jìn)制位1變成0,0變成1。例如,~012是對八進(jìn)制數(shù)12(即二進(jìn)制數(shù)0000000000001010)按位取反:

0000000000001010

1111111111110101

即八進(jìn)制數(shù)177765。因此,~012的值為八進(jìn)制數(shù)177765。

2.按位與、按位或及按位異或運(yùn)算

按位與(&)、按位或(|)及按位異或(^)運(yùn)算是對兩個(gè)操作數(shù)(8位或16位)的對應(yīng)二進(jìn)制位進(jìn)行運(yùn)算,每個(gè)二進(jìn)制位的值只可能是0或1。兩位間的按位與、按位或及按位異或運(yùn)算關(guān)系如圖3.4所示。

圖3.4按位邏輯運(yùn)算按位與運(yùn)算符(&)只有當(dāng)兩個(gè)操作數(shù)的對應(yīng)位上都為1時(shí),&才把該位置成1。按位或運(yùn)算符(|)只要兩個(gè)操作數(shù)的對應(yīng)位上有一個(gè)為1,|

運(yùn)算符就把該位置成1。按位異或運(yùn)算符(^)只有兩個(gè)操作數(shù)的對應(yīng)位不相等時(shí)(其中一個(gè)為0,另一個(gè)為1),^

就將該位置成1;否則,該位為0。圖3.4只對單個(gè)位給出了按位邏輯運(yùn)算關(guān)系。在C語言中,位邏輯運(yùn)算符實(shí)際上要對左右兩個(gè)操作數(shù)的每個(gè)相應(yīng)的位進(jìn)行上述操作。例如,兩個(gè)8位數(shù)01011101和11001011進(jìn)行位邏輯運(yùn)算的結(jié)果如下:

3.移位運(yùn)算

移位運(yùn)算符<<和>>均為雙目運(yùn)算符,它們只能對整型操作數(shù)進(jìn)行運(yùn)算。

左移運(yùn)算符<<的一般使用形式如下:

表達(dá)式1<<表達(dá)式2

其中,表達(dá)式1是被移位的運(yùn)算對象,表達(dá)式2是移位數(shù)。上式表示將表達(dá)式1左移表達(dá)式2給定的位數(shù)。將表達(dá)式1左移后,右邊騰出來的空位置為0,高位左移后溢出舍棄。

例3.1

左移運(yùn)算符<<的應(yīng)用。

#include<stdio.h>

main()

{

intx=1;

printf("%d,%d,%d,%d\n",x,x<<1,x<<2,x<<3);

}

輸出的結(jié)果如下:

1,2,4,8這就是說,某整型量若左移n位,就相當(dāng)于將其乘上2n。本例中,1左移1位時(shí)相當(dāng)于乘2,左移2位時(shí)相當(dāng)于乘22=4,左移3位時(shí)則相當(dāng)于乘23=8。

右移運(yùn)算符>>與左移運(yùn)算符的不同之處是:右移后左邊騰出來的位上應(yīng)置的值,因>>左邊表達(dá)式的類型以及所用的機(jī)器和編譯環(huán)境而異。如果左邊操作數(shù)為無符號類型,則右移后騰出來的位總用0填充。然而,若左邊的操作數(shù)是有符號整型,右移后就有符號位的問題。如果原來符號位為0(該數(shù)為正),則左邊騰出來的位上也總是置0。但如果原來符號位為1(該數(shù)為負(fù)),則左邊是移入0還是1,要取決于所用的計(jì)算機(jī)系統(tǒng)。有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯右移”,即簡單右移;移入1的稱為“算術(shù)右移”。例如,a的值為十六進(jìn)制數(shù)0x8102,分別進(jìn)行邏輯右移和算術(shù)右移:

a: 1000000100000010

a>>1: 0100000010000001 (邏輯右移)

a>>1: 1100000010000001 (算術(shù)右移)

在有些系統(tǒng)中,a>>1得到十六進(jìn)制數(shù)0x4081,而在另一些系統(tǒng)中可能得到的是十六進(jìn)制數(shù)0xC081。大多數(shù)編譯程序采用的是算術(shù)右移,即對有符號數(shù)右移時(shí),要將符號位也向右延伸。

4.位復(fù)合賦值運(yùn)算符

<<=,>>=,&=,^=,|=

屬于位復(fù)合賦值運(yùn)算符。

例如:a&

=

b相當(dāng)于a

=

a&b,a<<=2相當(dāng)于a

=

a<<2。

sizeof是單目(元)運(yùn)算符。它作用于變量名或C語言類型名,返回的是該變量或該類型的數(shù)據(jù)在C語言中所占的字節(jié)數(shù)(長度)。例如:

floatf;

sizeof(f):返回float型變量f所占字節(jié)數(shù)為

4。

sizeof(int):返回int類型數(shù)據(jù)所占字節(jié)數(shù)為

2。

本書的第九章將會介紹sizeof運(yùn)算符的用途。3.9測試數(shù)據(jù)長度運(yùn)算

一、選擇題

1.表達(dá)式“(a=4*5,b=a*2),b-a,a+=2”的值是()。

A.

2 B.

20 C.

22 D.

42

2.已知有聲明語句intx=8,則下列表達(dá)式中,值為2的是()。

A.

x+=x-=x

B.

x%=x-2

C.

x>8?x=0:x++

D.

x/=x+x習(xí)題3

3.邏輯“異或”運(yùn)算可描述為“axorb”,其中a和b為參加運(yùn)算的兩個(gè)操作數(shù),運(yùn)算結(jié)果為當(dāng)且僅當(dāng)a、b兩個(gè)操作數(shù)中只有一個(gè)為真時(shí)才為真,其他情況下均為假。以下表達(dá)式中()可以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論