1. 程式人生 > >C++ 強制型別轉換和賦值中的型別轉換

C++ 強制型別轉換和賦值中的型別轉換

強制型別轉換

原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)將有符號型資料賦值給長度相同的無符號型變數,連同原來的符號位一起傳送。