代码改变世界

经常搞不清楚的几个数据类型

2023-05-20 09:21  猎手家园  阅读(154)  评论(0编辑  收藏  举报

1、什么是浮点数?

之前我们学习了定点数,其中「定点」指的是约定小数点位置固定不变。那浮点数的「浮点」就是指,其小数点的位置是可以是漂浮不定的。

这怎么理解呢?

其实,浮点数是采用科学计数法的方式来表示的,例如十进制小数 8.345,用科学计数法表示,可以有多种方式:

8.345 = 8.345 * 10^0
8.345 = 83.45 * 10^-1
8.345 = 834.5 * 10^-2
...

看到了吗?用这种科学计数法的方式表示小数时,小数点的位置就变得「漂浮不定」了,这就是相对于定点数,浮点数名字的由来。

 

2、什么是单精度和双精度?

单精度,即float,一般在计算机中存储占用4字节,也就是32位,有效位数为7位;

双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。

 

不管float还是double 在计算机上的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位,指数位和尾数部分。其中float的符号位,指数位,尾数部分分别为1, 8, 23。 双精度分别为1, 11, 52。

精度主要取决于尾数部分的位数,float为23位,除去全部为0的情况以外,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位。

类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

 

3、U16位整型

U 表示 无符号

u8  的内存占用空间大小为只占1个字节。
u16的内存占用空间大小为占用2个字节。
u32的内存占用空间大小为占用4个字节。
int  的内存占用空间大小为占用8个字节。

 

4、1个字节占8个bit位