标签:
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: @
}
标签:
原文地址:http://www.cnblogs.com/smallnice/p/4438037.html