浮点数和定点数的关系理解
一直以来,程序中接触的数据类型都是int整型,char字符型,float单精度浮点型,double双精度浮点型。看到浮点和定点一直不知道如何划分这个概念的范畴。以为浮点就是float表示小数,定点就是int可表示整数而已。经过学习明白了显然是错误的。应该是这样划分的:
- 浮点:小数点非固定的数,可表示数据范围较广,整数,小数都可表示。包含float,double;
- 定点:
小数点固定
,可表示整数,小数。int(整数)本质是小数点位于末尾的32位定点数而已
;
1. 什么是单精度和双精度?
- 单精度:单精度数是指计算机表达实数近似du值的一种方式。VB中zhiSingle(单精度浮点型)变量存储为 IEEE
32 位(4 个字节)
,浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38 。 - 双精度:双精度浮点数(double)是计算机使用的一种数据类型,使用
64 位(8字节)
来存储一个浮点数。 它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是:4.9x10-324 ~ 1.7x10308。IEEE754为其定制标准。
2. 浮点数的表示法
浮点数以float为例讨论。
IEEE 754标准:
规定浮点数格式为:
- s表示符号位,当s=0,V为正数;当s=1,V为负数;
- M表示尾数,2>M>=1;
- E表示阶码。
32位的浮点数中,S是浮点数的符号位,占1位,安排在最高位,S=0表示正数,S=1表示负数。M是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边。E是阶码,占用8位。
64位的浮点数中符号位1位,阶码域11位,尾数域52位
将其封装到32位的字中:
符号位 | 阶码 | 尾数 |
1 | 8 | 23 |
根据32位数计算为十进制:
可以得出以下结论:
- 浮点数表示比整型那些更为复杂。如int中0…01000表示8,0…01001表示9,而浮点不能这样简单。
- 浮点数不能移位。因为各个位有特殊含义。像int数乘2可以左移1位实现。