變數型別的轉換

2021-04-28 08:03:44 字數 1280 閱讀 8426

變數型別的轉換

變數的資料型別是可以轉換的。轉換的方法有兩種, 一種是自動轉換,一種是強制轉換。 

自動轉換 

自動轉換發生在不同資料型別的量混合運算時,由編譯系統自動完成。自動轉換遵循以下規則: 

1.若參與運算量的型別不同

,則先轉換成同一型別,然後進行運算。

2.轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。

3.所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表示式,也要先轉換成double型,再作運算。

4.char型和short型參與運算時,必須先轉換成int型。

5.在賦值運算中,賦值號兩邊量的資料型別不同時, 賦值號右邊量的型別將轉換為左邊量的型別。 如果右邊量的資料型別長度左邊長時,將丟失一部分資料,這樣會降低精度, 丟失的部分按四捨五入向前捨入。圖21表示了型別自動轉換的規則。

6.當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別 

void main()

pi<--3.14159

s<--0,r<--5

s<--r*r*pi

顯示程式執行結果

float pi=3.14159;

int s,r=5;

s=r*r*pi; 

本例程式中,pi為實型;s,r為整型。在執行s=r*r*pi語句時,r和pi都轉換成double型計算,結果也為double型。但由於s為整型,故賦值結果仍為整型,捨去了小數部分。

強制型別轉換

強制型別轉換是通過型別轉換運算來實現的。其一般形式為: (型別說明符) (表示式) 其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。例如: (float) a 把a轉換為實型(int)(x+y) 把x+y的結果轉換為整型在使用強制轉換時應注意以下問題:

1.型別說明符和表示式都必須加括號(單個變數可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之後再與y相加了。

2.無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料說明時對該變數定義的型別。

main()

f<--5.75

將float f強制轉換成int f float f=5.75;printf("(int)f=%d,f=%f/n",(int)f,f); 本例表明,f雖強制轉為int型,但只在運算中起作用, 是臨時的,而f本身的型別並不改變。因此,(int)f的值為 5(刪去了小數)而f的值仍為5.75。

32 變數的型別轉換

現在我們已經可以從符號表中獲取使用者在php語言裡定義的變數了,是該做點其它事的時候了,舉個比例,比如給它來個型別轉換 想想c語言中的型別轉換細則,你的頭是不是已經大了?但是變數的型別轉換就是如此重要,如果沒有,那我們的 就會是下面這樣了 void display zval zval value b...

變數的型別自動轉換

byte shoat char 賦值 預設int型別 小數型別預設是double 的 如 5.0 img byte a 12 這裡12預設是int型別 那麼有個問題?不是小型別轉大型別才自動轉換呢?為啥這裡小型別可以存大型別的值得。那麼這裡就有人說 因為在範圍內啊 那麼再給你舉乙個反例 float ...

SqlServer 變數型別轉換

型別轉換函式 cast 值 as 要變成的型別 convert 要變成的型別,值 select cast 123 as int 123 select convert int,123 123 select cast 123.4 as int 123 這種寫法會報錯 select convert int...