我们知道,在C语言中,数值类型可以分为两大类:整型和浮点型
整型变量包括:短整型short 、整型int 、长整型long.
浮点型变量包括:单精度型 float 、双精度型 double
整型变量:一般占4个字节(32位),最高位代表符号位,0表示正数、1表示负数,取值范围是-2147483648~2147483647。
浮点型变量:也称为实型变量,单精度一般占4字节(32位),双精度一般占8字节(64位)。
数据自动转换顺序表
高 double ←← float
↑ ↑
↑ long
↑ ↑
↑ unsigned
↑ ↑
低 int ←← char,short
自动类型转换:当运算符两边的数值类型不同时,其中一个数的要经过转换,转换成和另外一个数类型相同时,才能进行计算。数值转换的原则是就高不就低,即级别低的数先转化成和级别高的数类型一致时,才能进行计算。所得结果的数据类型和级别高的数据类型一致。
强制类型转化运算符:
利用强制类型转化运算符,将一个表达式转化为所需类型。
(double)a //将a转化成double类型
(int)(x+y) //将 x+y 的值转化为int型
(float)(5%3)//将 5%3 转化为 float 型
下面,我们引进一个小案例,看看整型和浮点型之间的转换
#include <STDIO.H>
#include <STDLIB.H>
void main()
{
int a=1;
int b=2;
int x;
double y,z,w;
x=a/b;
y=double(a/b);
z=double(a)/double(b);
w=z+a;
printf("x=%d,y=%f,z=%f,w=%f,\n",x,y,z,w);
system("pause");
}
运行结果如下:
在本例中,我们设a=1,b=2,且a、b均为整型。我们知道,1/2 = 0.5,但在程序中受数值类型的影响,1/2的值却不一定为 0.5,。
x = a/b,因为x为整型变量,所以a/b 即取模,最后x为0。
y = double(a/b),因为y为浮点型变量,a/b取模后为0,化为浮点型后为 0.000000。
z = double (a) / double (b) ,先将a转化为浮点型 1.000000,再将b转为2.000000,所以z最终也为浮点型 0.500000。
w = a+z,虽然a是整型,z是浮点型,就高不就低,w最后也为浮点型,w为1.500000