2.11 类型转换
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
转换的方法有两种:
自动转换:
遵循一定的规则,由编译系统自动完成。
强制类型转换:
把表达式的运算结果强制转换成所需的数据类型。
2.11.1 自动类型转换原则
1、占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
2、转换方向
无符号和有符号参与运算 需要将有符号转换成无符号
int data1 = -10;
unsigned int data2 = 6;
if (data1+data2>0)
{
cout<<">0"<<endl;//结果输出
}
else
{
cout<<"<=0"<<endl;
}
int和double参加运算会将int转成从double类型
int data1 = 0;
double data2 = 0.0;
cout<<sizeof(data1+data2)<<endl;//8
char和short类型 只要参加运算都会将自己转换int类型
char ch='a';
short sh=0;
cout<<sizeof(ch+ch)<<endl;//4
cout<<sizeof(sh+sh)<<endl;//4
cout<<sizeof(ch+sh)<<endl;//4
2.11.2 强制类型转换
(类型说明符)(表达式)
功能:
把表达式的运算结果强制转换成类型说明符所表示的类型
例如:
(int)p+1 对p强转成int类型 人好再+1
(int)(p+1) 对p+1强转成int类型
不管是自动类型转换还是强制类型转换都是临时。
float f=3.14f;
int x = 0;
x = (int)f;
cout<<"x = "<<x<<", f="<<f<<endl;//x=3,f=3.14