我有以下24位二进制文件:
0101 0011 1111 1101 0111 1101
我需要弄清楚:
这些24位可以代表一对单精度浮点数(实数)?
教科书示例说,将24位拆分为两个12位二进制数是我应该前进的方向。
我最终会得到0101 0011 1111
和1101 0111 1101
但是,我的问题是,我的教科书仅给出了16位和32位二进制数的实际工作示例。我不确定如何找出指数,尾数和特征。对我来说这都是很新的。
编辑:这是该教科书的摘录,指出我应该实现的目标:
例如24位字符串:
0011 0110 0011 1001 0011 0101
转换为一对单精度浮点(实数)数字0.13672和-0.0004044。
在这台不太精确的计算机上,任何介于0.13672和0.1406之间的单精度浮点数(实数)都将具有相同的12位模式。
对于那些发现此问题感到困惑的人:教科书如何将0011 0110 0011 1001 0011 0101
转换为0.13672和−0.0004044?
答案 0 :(得分:1)
将24位值拆分为一对12位字段看起来像是正确的方法。对于两个12位字段,此处使用的浮点格式似乎是从最左边的位开始的:
一个符号位(0表示正,1表示负)
五个指数位,给出一个无符号值,该值有15的偏差(因此我们必须从该字段的无符号值中减去15才能获得实际的指数)
6位有效位数给出一个无符号值
以这种格式表示的浮点数的绝对值将由下式给出:
significand * ( 2 ^ exponent ) / ( 2 ^ 6 )
对于给定的示例,我们有:
0011 0110 0011 =>
sign bit = 0, positive
exponent field = 01101, which is decimal 13, so actual exponent = 13 - 15 = -2
significand = 100011, which is decimal 35
value = positive 35 * ( 2 ^ -2 ) / ( 2 ^ 6 ) = 0.13672
1001 0011 0101 =>
sign bit = 1, negative
exponent field = 00100, which is decimal 4, so actual exponent = 4 - 15 = -11
significand = 110101, which is decimal 53
value = negative 53 * ( 2 ^ -11 ) / ( 2 ^ 6 ) = -0.0004044
您可以通过对有效值加一的方式重复这些计算来确认有关此格式精度的注释。