基础04:移码和浮点数的二进制表示

简介:

本文介绍移码以及浮点数的二进制表示。其中浮点数的二进制表示比较难理解,需要一点点数学知识。

标准移码

在一般情况下,移码就是将补码的符号位取反。
-118D = -1110110B (真值)
-118D表示-118的十进制;-1110110B表示二进制。
原码: 11110110
反码: 10001001
补码: 10001010
移码: 00001010

符号位取反的移码,可以等同于偏移值为128的移码,称为标准移码。
即-118D+128D = 10001010B + 10000000B = 00001010B。
移码,可以理解为补码加上偏移值,即将整个取值范围右移一段距离,从移码中可以直接看出真值的大小。
-128[移]: 00000000
-127[移]: 00000001
-126[移]: 00000010
……
+126[移]: 11111110
+127[移]: 11111111

移码的定义

X[移] = 2^(n-1) + X, -2^(n-1) <= X <= 2^(n-1) -1
X为真值,X[移]表示真值X的移码。
举个栗子:
一个字节,n=8。X[移] = 128 + X, -128 <= X <= 127

浮点数二进制表示

浮点数的二进制表示,分为三个部分。
sign,符号位。0表示正,1表示负。
exponent,指数位。采用2^(n-1) - 1的移码。n表示指数位位数。
fraction,小数位。

浮点数的位数如表所示。

—- sign exponent 移码 fraction
32位 1 8 2^(8 - 1) - 1 = 127 23
64位 1 11 2^(11 - 1) - 1 = 1023 52

在深入一点

浮点数的二进制表示用数学表示。
V= (−1)^S ×M × 2^E
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
E表示浮点数的指数。

对于M,1<=M<2,M可以写成1.xxxxxx的形式,其中xxxxxx就是小数部分,由0,1组成。IEEE754规定,第一位总是1,可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。

指数E的特殊情况(32位浮点数为例)

浮点数的指数E E的值 M的值 数值
-127 0 全0 ±0
-127 0 M小数点前不加1
0.xxxxxx的形式
128 255 全0 ±无穷
128 255 非0 NaN

  • 浮点数的指数E移码(偏移127)后得到E的值。
  • E全为0。浮点数的指数E等于-127,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。目的是为例表示±0,以及接近于0的很小的数字。
  • E全为1。如果有效数字M全为0,表示±∞(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。

举个两个栗子

9.0的表示方法:
为正数,所以sign=0。
9.0D = 1001.0B = 1.001*2^3B。 注意:小数点不是十进制的小数点,是二进制的小数点。 1.001D ≠ 1.001B。
所以exponent的原值是3,移值是3+127=130D=10000010B。
分数部分,去掉第一位的1,剩余001 在后面补充0,保证23位,即00100000000000000000000。
合并起来,结果为0 10000010 00100000000000000000000。

0.625的表示方法:
为正数,sign=0。
0.625D = 0.101B。其中0.1B = 0.5D = (1/2)^1;0.01B = 0.25D = (1/2)^2;0.001B = 0.125D = (1/2)^3。
0.625D = 0.101B = 1.01 * 2^(-1)。
所以exponent的原值为-1,采用移植是-1+127=126D=01111110B
分数部分,去掉第一位的1,剩余01,在后面补充0,保证23位 01000000000000000000000
合并起来,结果为0 01111110 01000000000000000000000

总结

  1. 移码即补码右移一个偏移量。
  2. 浮点数的二进制表示,还是很头晕的。看不懂,多看几遍。如果还是看不懂,那就看不懂吧。

~~ EOF ~~

目录
相关文章
|
18天前
|
存储 Java C++
浮点数(小数)在计算机中如何用二进制存储?
本文详细介绍了浮点数在计算机中如何用二进制存储,包括符号、指数和尾数三部分的组成及其计算方法。作者通过具体例子,如 `11.1875` 和 `0.1875` 的二进制表示,解释了如何将小数转换为二进制,并讨论了指数部分的“EXCESS系统表现”。文章还提到浮点数运算中的精度问题,并提供了进一步学习的参考资料。
29 2
浮点数(小数)在计算机中如何用二进制存储?
|
6月前
补码浮点数运算(设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。)
补码浮点数运算(设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。)
352 0
|
机器学习/深度学习 存储
数据的表示:原码、反码、补码、移码以及浮点数的运算
数据的表示:原码、反码、补码、移码以及浮点数的运算
481 0
数据的表示:原码、反码、补码、移码以及浮点数的运算
【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
二进制浮点数的加减法运算
二进制浮点数的加减法运算
二进制数的补码及运算(2)
二进制数的补码及运算(2)
281 0
二进制数的补码及运算(2)
|
存储
数制间的转换,原码、反码、补码
数制间的转换,原码、反码、补码
780 0
数制间的转换,原码、反码、补码
二进制数的补码及运算(1)
二进制数的补码及运算(1)
280 0
定点数与浮点数简单解释
定点数 定点数:小数的位置是固定不变的。定点数又包括定点整数和定点小数。 定点小数:小数点隐含固定在最高数据位的左边,整数位则用于表示符号位,用于表示纯小数。
228 0
定点数与浮点数简单解释