C++ 強制型別轉換和賦值中的型別轉換
阿新 • • 發佈:2019-01-27
強制型別轉換
原C語言的形式:
(型別名)(表示式)
比如:
(double)a //把a轉換為double型別
(int)(a+b) //把a+b的值轉換為整型
需要注意的是:如果強制型別轉換的物件是一個變數,那麼該變數不需要用括號括起來;但是如果物件是一個包含多項的表示式,則表示式應該用括號括起來。
(int)(a+b) //把a+b的值轉換為整型
(int)a+b //把a的值轉換為整型,然後加b
C++新增加的形式:
型別名(表示式)
該形式的型別名不需要括括號,但是待轉換的物件不管是變數還是表示式都需要用括號括起來,比如:
int(x)
int(x+y)
舉個栗子:
#include <iostream>
using namespace std;
int main()
{
float x;
int i;
x = 3.6;
i = (int)x;
cout<<"x = "<<x<<",i = "<<i<<endl;
getchar();
return 0;
}
執行結果:
x = 3.6,i = 3
賦值過程中的型別轉換
如果賦值運算子兩側的型別不一致,但都是數值型或字元型,在賦值時可以自動進行型別轉換。
字元型與數值型的說明:
在C++基本的資料型別中,可以分為四類:整型,浮點型,字元型,布林型。其中數值型包括 整型與浮點型;字元型即為char。
(1)將浮點型資料賦值給整型變數時,捨棄其小數部分。
float x;
int i;
x = 3.6;
i = x;
cout<<"x = "<<x<<",i = "<<i<<endl;
執行結果:
x = 3.6,i = 3
(2)將整型資料賦值給浮點型變數時,數值不變,但是以指數形式儲存。
float x;
int i;
i= 3;
x = i;
cout<<"x = "<<x<<",i = "<<i<<endl;
執行結果:
x = 3,i = 3
(3)將double型資料賦值給float型變數時,注意數值範圍溢位。
float x;
double i;
i= 3.123456789e100;
x = i;
cout<<"x = "<<x<<",i = "<<i<<endl;
此時出現溢位。
(4)字元型資料可以賦值給整型變數,此時存入的是字元的ASCII碼。
char x;
int i;
x = 'C';
i = x;
cout<<"x = "<<x<<",i = "<<i<<endl;
執行結果:
x = C,i = 67
(5)將一個int,short或long型資料賦值給一個char型變數,只將低8位原封不動的送到char型變數中。
(6)將有符號型資料賦值給長度相同的無符號型變數,連同原來的符號位一起傳送。