强制类型转换
原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)将有符号型数据赋值给长度相同的无符号型变量,连同原来的符号位一起传送。