一、浮点数的存储
一个浮点数由两个数M和E来表示: M*b^E。
其中b是基数(记数系统的基);M是尾数,形如±d.ddd...ddd(每一位是一个介于0到b-1之间的整数,包括0和b-1);E是阶码。
如果M的第一位是非0整数,则此表达式为正规化表达式。
这种存储格式的优点是:可以在某个固定长度的存储空间内表示整型数据无法表示的更大范围的数。
在C语言中,浮点数有三种:float(单精度)、double(双精度)、long double(长双精度)。下面主要以单精度为例进行说明。
以单精度为例。(单精度二进制小数,使用32位存储)
注: (1) S:符号位。1代表负数,0代表正数。
(2) E:阶码。用余码来表示,根据IEEE754,余码为余2^(n-1)-1(其中n为阶码所占二进制位数)。
(3) M:尾数。保证精确度。
二、浮点数的取整
C语言对于浮点数有以下几种取整方法:
(1) 强制类型转换:直接赋值给整数变量。 (直接舍去小数部分)
例如:int i = 2.5;或 i = (int) 2.5;//i=2 。
(2)使用 double floor(double x) 函数。( 返回的是小于或等于x的最大整数) ========>>>>>>>>floor 是地板的意思
例如:int i = floor(2.5);// i=2; 或int i = floor(-2.5);// i=-3
例如:int i = ceil(2.5);// i=3 int i = ceil(-2.5);// i=-2
(4)使用long double roundl(long double x); double round(double x); float roundf(float x); 函数。(返回的是四舍五入后的整数值)
例如:round(1.499900) is 1.000000;或round(1.500001) is 2.000000。
注:1、floor()是向负无穷大舍入,floor(-2.5) =-3;ceil()是向正无穷大舍入,ceil(-2.5) =-2。这两个函数包含于<math.h>头文件中。
2、后缀 l, f也可以加在ceil 和 floor后,意义和用法同 round