標籤:
C++中有豐富的類型,在對不同類型進行運算時,就需要進行類型轉化。
總的轉換規則:將小範圍類型轉換為大範圍類型,例如:float->double,short->int,int->long,等等。C++這樣轉換是為了不損失精度,而對於對資料精度要求較高的應用來說精度損失無疑是災難。需要指出:將0賦給bool變數時,將被轉換為false;而非零值將被轉換為true。
運算式中的轉換:
當同一個運算式中包含兩種不同的算術類型時,C++將執行兩種自動轉化。1、一些類型在出現時便會自動轉換;2、有些類型在於其他類型同時出現在運算式中時將會轉換。
自動轉換:C++在計算運算式時,會將bool,char,unsigned char,signed char,short值轉換為int。這種轉換成為整形提升(integral promotion)。例:當有兩個short型變數相加時,C++會將short型轉為int型,在進行加運算,然後再轉為賦值號左運算元的類型。至於2遵循轉換規則即可,不再贅述。
強制類型轉化
強制類型轉換格式有兩種:1、(typeName) value;2、typeName(value)
第一種格式源於C語言。第二種格式是C++特有,像不像函數調用!
另外C++還引入了4中強制類型轉換預算符,以後再討論。下面給出代碼:
//類型轉換
#include<iostream>
int main()
{
using namespace std;
int intthree = 3; //將小範圍值付給大範圍值,精度不損失。反之有可能損失精度,從而帶來麻煩。
long lthree = intthree;
cout<<lthree<<endl; //output:3
long lnum = 3456765;
short snum = lnum;
cout<<snum<<endl; //output: -16643
cout<<lnum<<endl; //output: 3456765
signed int intfu = -5;
unsigned int intzheng = 10000;
cout<<intfu<<endl; //output: -5
int inth = 64;
//強制類型轉換並不改變變數本身在值,而是建立一個新的,指定類型在值,這個值通常在運算式中使用。
cout<<static_cast<unsigned char>(inth)<<endl; //output: @
}
C++類型轉換