如果賦值運算子兩側的型別不一致,但都是數值型或字元型,在賦值時要進行型別轉換。型別轉換有系統自動完成,轉換的規則是:
(1)將實型資料(包括單、雙精度)賦給整型變數時,先對實數取整(捨去小數部分),然後賦給整型變數。如:
int a;
a=3.14
執行的結果是,a的值為3,以整數形式儲存在儲存單元中,小數部分.14將被捨棄。
(2)將整型資料賦給單、雙精度型變數時,數值不變,但以實數的形式儲存到變數中。如:
float f ;
double d;
int i = 123;
f = i;
d = i;
執行的結果是,f=123.0000,d=123.0000000000000。可以看出,系統會在123的小數部分上通過補0的方式補齊有效位數。
(3)將乙個double型資料賦給乙個float型的變數時,會擷取其前面的7位有效數字存放到float變數的儲存單元中,但要注意,數值的範圍不能溢位。如:
double d = 123.456789e10;
float f;
f = d;
上面**中的f無法容納如此大的數,出現溢位的錯誤。
(4)字元型資料賦給整型變數時,將字元的ascii碼賦給整型變數。
(5)將乙個佔位元組數多的整型資料賦給乙個佔位元組少的整型變數或者字元變數(例如,把乙個4個位元組的long型資料賦給乙個2個位元組的short型變數,或將乙個2位元組的int型資料賦給1位元組的char型變數),只將其低位元組原封不動地送到該變數(即發生截斷)。如:
int i ;
char c;
i = 289;
c = i;
賦值的過程是把i的後八位(二進位製碼)賦給變數c,c得到的數值是33,如果用「%c」輸出c變數 ,得到的將是字元「!」。要避免進行這種賦值,因為賦值後數值可能發生失真。如果一定要進行這種賦值,應當保證賦值後數值不發生失真,即所賦的值在變數的數值範圍內。
Java的型別賦值轉換
數值型別的轉換我就不說了,與c c 的一樣。我主要說物件型別。把子類賦值給父類物件是賦值相容的,可以直接賦值。如 typetest tt new typetest object oo oo object tt 或者oo tt oo是個object型別的引用變數,指向了typetest型別的例項,我們...
Java的型別賦值轉換
數值型別的轉換我就不說了,與c c 的一樣。我主要說物件型別。把子類賦值給父類物件是賦值相容的,可以直接賦值。如 typetest tt new typetest object oo oo object tt 或者oo tt oo是個object型別的引用變數,指向了typetest型別的例項,我們...
算術型別轉換和賦值型別轉換
1 混合運算的型別轉換規則 當二元運算子兩邊的運算元型別不同,但型別相容時,系統將資料型別轉化為一致後進行運算,具體規則如下 1 字元可以作為整數參與數值運算,整數的值為其ascii 值。2 運算元為字元或者短整型時,系統自動將其轉化為整型。3 運算元為單精度型別時,系統自動將其轉換成雙精度型。4 ...