經(jīng)驗之談_C語言強(qiáng)制類型轉(zhuǎn)換運算
C語言中的強(qiáng)制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運算來實現(xiàn)的。
其一般形式為:
(類型說明符)(表達(dá)式)
其功能是把表達(dá)式的運算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。
例如:
(float)a 把a(bǔ) 轉(zhuǎn)換為實型
(int)(x+y) 把x+y 的結(jié)果轉(zhuǎn)換為整形
在使用強(qiáng)制轉(zhuǎn)換時應(yīng)注意以下問題:
1)類型說明符和表達(dá)式都必須加括號(單個變量可以不加括號) ,如果把(int)
(x+y)寫成( int)x+y 則成了把x 轉(zhuǎn)換成int 型之后再與y 相加了。
2)無論是強(qiáng)制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是為了本次運算的需要而對變量的
數(shù)據(jù)長度進(jìn)行的臨時性的轉(zhuǎn)換,而不改變數(shù)據(jù)說明時對該變量定義的類型。
【例1】
#include <stdio.h>
int main (void)
{
float f = 3.14;
printf("(int)f = %d,f = %.2f\n",(int)f,f);
return 0;
}
本例表明, f 雖強(qiáng)制轉(zhuǎn)為int 型,但只在運算中起作用,是臨時的,而f 本身
的類型并不改變。因此, (int)f 的值為5(刪去了小數(shù))而f 的值仍為5.75.
1、求余運算符(模運算符) “%”:雙目運算,具有左結(jié)合性。要求參與運
算的量均為整型。求余運算的結(jié)果等于兩數(shù)相除后的余數(shù)。
#include <stdio.h>
int main (void)
{
printf(" %d\n",110%3);
return 0;
}
本例輸出110 除以3 所得的余數(shù)2。
2、算數(shù)表達(dá)式和運算符的優(yōu)先級和結(jié)合性
表達(dá)式是由常量、變量、函數(shù)和運算符組合起來的式子。一個表達(dá)式有一個
值及其類型, 他們等于計算表達(dá)式所得結(jié)果的值和類型。表達(dá)式求值按運算符的
優(yōu)先級和結(jié)合性規(guī)定的順序進(jìn)行。單個的常量、變量、函數(shù)可以看作是表達(dá)式的
特例。
算數(shù)表達(dá)式是由算術(shù)運算符和括號連接起來的式子。
算數(shù)表達(dá)式:用算數(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、
符合C語法規(guī)則的式子。
以下是算數(shù)表達(dá)式的例子:
a+b;
(a*2)/c;
(x+r)*8-(a+b)/7;
++I;
Sin(x)+sin(y);
(++i)-(j++)+(k--);
運算符的優(yōu)先級: C語言中,運算符的運算優(yōu)先級共分為15 級。1 級最高,
15 級最低。在表達(dá)式中,優(yōu)先級較高的先于優(yōu)先級較低的進(jìn)行運算。而在一個
運算量兩側(cè)的運算符優(yōu)先級相同時,則按運算符的結(jié)合性所規(guī)定的結(jié)合方向處
理。
運算符的結(jié)合性: C語言中各運算符的結(jié)合性分為兩種,即左結(jié)合性(自左
至右)和右結(jié)合性(自右至左) 。例如算術(shù)運算符的結(jié)合性是自左至右,即先左
后右。如有表達(dá)式x-y+z,則先執(zhí)行x-y 運算,然后再執(zhí)行+z 運算。這是左結(jié)合性。
右結(jié)合性最典型的是賦值運算符。如x=y=z.
3、強(qiáng)制類型轉(zhuǎn)換運算符
其一般形式為:
(類型說明符)(表達(dá)式)
其功能是把表達(dá)式的運算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。
例如:
(float) a
(int)(x+y)
4、自增、自減運算符
++i 自增1 后再參與其他運算。
--i 自減1 后再參與其他運算。
i++ i 參與運算后, i 的值再自增1.
i--參與運算后, i 的值再自減1.
比較容易出錯的是i++,i--。因此應(yīng)仔細(xì)分析。
【例3】
#include <stdio.h>
int main (void)
{
int i = 8;
printf(" output = %d\n",++i);//output=9
printf(" output = %d\n",--i);//output=8
printf(" output = %d\n",i++);//output=8
printf(" output = %d\n",i--);//output=9
printf(" output = %d\n",-i++);//output=-8
printf(" output = %d\n",-i--);//output=-9
return 0;
}
【例4】
#include <stdio.h>
int main (void)
{
int i=8,j=8,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("p=%d,q=%d,i=%d,j=%d\n",p,q,i,j);
return 0;
}
這個程序中,對p=(i++)+(i++)+(i++)應(yīng)理解為三個i 相加,故為15.然后i 自增
1,三次故為i=11.對q 則不然,先自增1,再參與運算, q=10+11+12=31。
|