Assembly 如何区分1和零浮点值?

Assembly 如何区分1和零浮点值?,assembly,floating-point,format,Assembly,Floating Point,Format,我知道这可能是一个noob问题,但因为我正在学习的电子书中没有涉及到这一点,所以我要问它。在IEEE标准的二进制浮点格式中,通过科学记数法实际表示数字,我知道一个整数值总是被假定添加到二进制的有效位部分所示的小数部分,而不包括在二进制中,所以让我困惑的是如何区分1和零浮点值,因为我假设它们都有一个完全为零的有效位,我猜这里的微分应该通过指数部分来完成,但不知道如何区分 对于零,有两个正负零,符号位不同,但必须视为相等,有效位和指数均为0位,而对于非零值,其中至少一个值为1,指数均为1位,但最重要

我知道这可能是一个noob问题,但因为我正在学习的电子书中没有涉及到这一点,所以我要问它。在IEEE标准的二进制浮点格式中,通过科学记数法实际表示数字,我知道一个整数值总是被假定添加到二进制的有效位部分所示的小数部分,而不包括在二进制中,所以让我困惑的是如何区分1和零浮点值,因为我假设它们都有一个完全为零的有效位,我猜这里的微分应该通过指数部分来完成,但不知道如何区分

对于零,有两个正负零,符号位不同,但必须视为相等,有效位和指数均为0位,而对于非零值,其中至少一个值为1,指数均为1位,但最重要的一位除外


列表中列出了确切的位模式。

我写了一个答案,其中提到了隐式位,这就是我想大家在这里想知道的

我将在这里进一步展开。我将使用字符序列和=>表示等价于和给予

如果您查看32位无符号整数格式的iEEE-754单精度浮点SPFP数,这就是如何提取各个部分:

符号:和,0x8000000 1位,右移31位 指数:和0x7F8000008 位并右移23位 有效位尾数:和 0x007fffff 23位。如果是原件 浮点数是非零的吗 或者在隐式位中使用 0x00800000=>有效位中的24位。 零有两种变体:0.0和-0.0 0x00000000和0x8000000。指数=0和有效位=0定义一个零。以同样的方式,还有两种变体:1.0和-1.0 0x3f800000和0xbf800000。正如您所见,0.0和1.0之间没有混淆。我会尽力解释原因

任何非零数的指数范围为0x01到0xfe。在某种程度上过于简化了,有效位非零的指数0x00用于下溢结果情况,有效位非零的指数0xff用于上溢结果情况,即SPFP异常。对应于1.0的指数为0x7f,对应于0。见下一段,给出2^0=1。下面的下一个指数是0x7e,对应于-1,表示2^-1=0.5,依此类推。对于指数0x7f,有效位将尝试表示1.0范围内的所有数字