计算机中的Float是怎么存储的
大约 1 分钟
计算机中的Float是怎么存储的
组成
单精度float占32位,这32位分成三部分:
- 符号位S占1位
- 指数E占8位
- 尾数M占23位
举个🌰
这里不写表达式,直接举个🌰来理解
1、 十进制转二进制
比如25.125,转化成二进制为11001.001
2. 取尾数
这里用到了移位处理
将11001.001
左移四位变为x.xxxxxxx
的格式,即1.1001001
抛弃1(所有的float的尾数前面默认都有一个1不写,省了一位,提高了精度
所以得出位数是1001001
3. 求指数
因为左移了四位,所以11001.001
= 1.1001001 * 2^4
,这样便求出指数是4.
但这时候并不能直接将4二进制化为100之后存入E。因为考虑到指数可以是负的,所以规定在存入 E 时在它原本的值加上一个中间数 127。这个127怎么来的呢?因为单精度float中,E占了8位,2^8=256,取值范围是0~225,所以规定在存入 E 时在它原本的值加上一个中间数 127,这样 E 的取值范围为 -127~128。表示 double 时,一共占 11 bit,存入 E 时加上中间数 1023,这样取值范围为 -1023~1024。
所以最后的出来的指数 E = 4 + 127,转化为二进制 10000011
4. 拼凑
最后将三部分拼凑起来,并且用0将尾数补齐
0 10000011 10010010000000000000000
单精度 & 双精度
单精度 | 双精度 | |
---|---|---|
符号位S | 1 | 1 |
指数位E | 8 | 11 |
尾数位E | 23 | 52 |