所以我不确定如何执行此操作,但是我会尝试的。我哪里出问题了?
所以我知道double的正负号为1位,指数为8位,小数为23位。
因此,由于它是负数,所以以1开始。
41等于二进制的101001。
0.125等于1/8 = 1/2 ^ 3 = 1 * 2 ^(-3)= 0.001。有没有更简单的方法来计算这个?
所以加起来是-101001.001,它是-1.01001001 * 2 ^ 5
由于ieee754标准中的指数为5,浮点的偏移量为127,则5 + 127 = 132(二进制为10000100),因此以32位二进制或双精度表示为
1 10000100 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
是吗?还是我错过了什么?有没有更简单的方法?
答案 0 :(得分:2)
您的问题似乎使32位和64位IEEE 754二进制浮点格式混淆并合并。说“因为ieee754标准中的浮点指数是5,偏移量是127,所以没有意义”。 IEEE 754标准明确指出,指数大小和偏差均取决于格式。确实,对于IEEE 754标准,指数是5,偏置是127(对于32位二进制浮点),而对于64位二进制浮点则为false。
32位和64位格式的共同点:
-41.125为负,因此对于两种格式,我都将转换41.125,但将符号位设置为1。
十进制41.125是二进制101001.001或1.01001001,二进制指数为5。
32位二进制浮点数:
指数为8位宽,偏置为127。十进制的指数字段为132,二进制为10000100。
对于普通数字,无需在二进制点之前存储数字。它是非零的,并且只有一个非零的二进制数字。小数部分为01001001,后跟零填充为23位。
将它们组合在一起可得到二进制(四位的逗号分组块,用空格分隔字段):
1 100,0010,0 010,0100,1000,0000,0000,0000
十六进制0xc2248000。
64位二进制浮点数:
指数为11位宽,偏置为1023。十进制的指数字段为1023 + 5 = 1028,二进制为10000000100。小数部分为01001001,后跟零填充为52位。
将它们组合在一起可得到二进制(四位的逗号分组块,用空格分隔字段):
1100,0000,0100,0100,1001,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
十六进制0xc044900000000000
您的问题
最后,除了标题问题外,您还会问“是吗?还是我错过了一些事情?有没有更简单的方法?”。
您的答案显然是错误的。它有65位,标题问题的正确答案将只有32位,不多也不少。
您可能一直试图通过添加尾随零来从32位表示形式中计算64位表示形式。不适用于IEEE754。存在浮点系统,其中64位和32位格式仅在有效宽度上有所不同。出于情感上的原因(这是我在位级别研究的第一个浮点系统),请参阅NCR Century浮点。从NCR CENTURY 300 PROCESSOR的第65页开始介绍了格式。 IEEE 754是不同的。指数的宽度和偏差在32位和64位格式之间有所不同。
第65位可能来自于在使用空格分隔字段和使用空格分组数字之间进行切换。这就是为什么此答案使用逗号而不是空格进行分组的原因。
我相信您会错过32位和64位格式之间的差异程度。
但是,除此之外还存在一些问题。仅查看问题结果的最左32位,并与该答案中的结果进行比较:
Q: 1 100,0010,0 001,0000,0000,0000,0000,0000
A: 1 100,0010,0 010,0100,1000,0000,0000,0000
符号和指数字段匹配。我们都将归一化值的分数部分计算为0.010011。答案具有该位模式作为有效字段的最左位。该问题并未说明该字段的计算方式。
最简单的方法是将其留给计算机。有几个在线计算器和转换器将为您完成此任务。已针对IEEE 754 calculator检查了此答案中的结果。