强制类型转换是利用强制类型转换运算符将数据类型转换成所需要的类型。强制类型转换符是由一对圆括号将某个类型名括起来构成的。
强制类型转换的语法格式为:
(类型名)表达式
如:
(double)a /*将变量a转换成double型*/
(int)(x+y) /*将x与y的和转换成整型*/
(int)x+y /*先将x转换成整型,然后再与y求和*/
求一个浮点数的个位数字。
#include <stdio.h>
void main()
{
float x;
int a;
printf("Enter a float number:\n");
scanf("%f", &x);
a = (int)x % 10;
printf("a=%d\n", a);
}
运行结果为:
Enter a float number:
123.4567
a=3
求余运算符的两个操作数必须是整型数据或字符型数据,示例里面的变量x定义为一个单精度浮点型数据,无法进行求余运算,因此要将其进行强制类型转换,转换成整型,然后再进行求余运算。
在进行强制类型转换时,得到一个所需类型的中间值,原来变量的类型及该变量所存储的值并未发生变化。
#include<stdio.h>
void main()
{
float x;
int a;
x=3.5;
a=(int)x; /*运用强制类型转换将浮点型数据转换成整型数据*/
printf("x=%f,a=%d\n",x,a);
}
程序运行的结果为:x=3.500000,a=3
自动转换一般不会使数据受到损失,而强制转换就有可能使数据受损或结果难以理解,这是由于高级别的类型转换为低级别的类型时无法完整存储造成的。我们可以像下面这样理解数据类型之间的转换。
(1)实数型之间的转换
将单精度转换成双精度,数据处理的方法是数据所占的字节由4字节变成8字节;有效数字由7位变成16位;数字大小没有变化。
将双精度转换成单精度,数据处理方法是数据所占的字节由8字节变成4字节;截取前面7位有效数字,数字可能不准确,注意溢出。例如:
float f;
double d=123.456789e100;
f=d;
printf("%f",f);
这段代码写在程序里面,在链接编译时并不会出现错误,但会给出将double型转换成float型可能会丢失数据的警告提示。
(2)整型与实数型之间的转换
将整型向实数型数据转换时,要补充小数位数和精度,如:整型数2 转换成单精度浮点型为2.000000。
将整型向实数型转换时,将截断小数位,只保留整数部分,而不是四舍五入,同时要注意数据的溢出。如:2.8转换成整型数为2。
(3)字符型与实数型之间的转换
字符型转换成实数型时,数据由字符型的存储方式转变成浮点数的存储方式,数字大小不变,补足有效位数。实数型转换成字符型时,以字符型的方式存储,舍弃小数部分,注意数字的溢出。
(4)整型之间的转换
较长整型向较短整型转换时,要截断高位,只保留低位数据。
较短整型向较长整型转换时,将较短整型数的16位送到较长整型的低16位中,如果较短整型为正值(符号位为0),则较长整型变量的高16位补0;如果较短整型变量为负值(符号位为1),则较长整型变量的高16位补1,以保持数值不变。如果是无符号数,低位直接赋值,高位补0即可。
(5)有符号数向无符号数转换时,原来的符号位不再作为符号,而变为数据的一部分;无符号数向有符号数转换时,最高位被当做符号位。
酷客网(coolcou.com) – 专注IT精品教程和实例
评论前必须登录!
注册