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