版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電力系統(tǒng)電力物資安全儲存與運(yùn)輸合同3篇
- 二零二五年建筑公司內(nèi)部工程承包合同范本5篇
- 臨時(shí)服務(wù)協(xié)議:專項(xiàng)工作期間合作意向書版A版
- 2025年度農(nóng)家樂鄉(xiāng)村旅游服務(wù)合同范本3篇
- 2024版有關(guān)房屋分配協(xié)議書
- 2024租賃期滿設(shè)備回收合同
- 二零二五年租房合同涉及的環(huán)保要求3篇
- 二零二五版出租車行業(yè)駕駛員勞動合同執(zhí)行規(guī)范6篇
- 二零二五年能源設(shè)施工程設(shè)計(jì)合同補(bǔ)充協(xié)議3篇
- 2024版智能可穿戴設(shè)備設(shè)計(jì)與生產(chǎn)合同
- 3-U9C操作培訓(xùn)-MRP基礎(chǔ)
- 2024至2030年中國銅制裝飾材料行業(yè)投資前景及策略咨詢研究報(bào)告
- 中金公司在線測評真題
- 高中英語新課程標(biāo)準(zhǔn)解讀課件
- 2024供應(yīng)商大會策劃方案
- 2024光伏發(fā)電工程交流匯流箱技術(shù)規(guī)范
- 旅游活動碳排放管理評價(jià)指標(biāo)體系構(gòu)建及實(shí)證研究
- 2024小學(xué)語文六年級上冊第四單元:大單元整體教學(xué)課件
- 12S108-1 倒流防止器選用及安裝
- 人教版六年級下冊數(shù)學(xué)期末測試卷附答案【達(dá)標(biāo)題】
- 員工工作狀態(tài)分析
評論
0/150
提交評論