如何计算尾数中的隐藏位? MIPS 代码 IEEE-754

How to account for hidden bit in mantissa? MIPS code IEEE-754

这是我的代码,用于仅打印浮点数的尾数。 $t1 中存储的值是值 0xBEDCFFFF,它的尾数为 10111001111111111111111。我的代码打印这个时没有开头的那个。需要时输入隐藏位1或0的子句怎么写?

li $t4, 1                   # Reset counters
li $t3, 23                  
mantloop:                   # Loop to mask and print each bit
    ble $t3, $t4, finish            # escape clause
    subi $t3, $t3, 1            # subtract from the counter 
    srl $t2, $t2, 1             # shifting mask
    and $t0, $t1, $t2           # ANDing registers
    bnez $t0, printOneee            # Print one or zero
printZerooo:
    li $v0, 1
    li $a0, 0
    syscall
    j mantloop              # loop reset
printOneee:
    li  $v0, 1
    li $a0, 1
    syscall
    j mantloop              # loop reset

finish:                     # method complete

"account for" 不清楚您的意思。如果您想打印 IEEE754 浮点数的二进制表示,则隐含位不是它的一部分。

如果你想要尾数代表的实际值,你需要知道指数。

对于非正规数,尾数的隐式前导位为 0(当指数字段为零时)。否则隐含位为 1。 https://en.wikipedia.org/wiki/Single-precision_floating-point_format。这包括+- 0.0,用exponent=0 mantissa=0.

表示

如果您没有任何非正规化,则前导位始终为 1。(但是 0.0 算作次正规化)。

https://www.h-schmidt.net/FloatConverter/IEEE754.html 很有用:对于任何输入位模式(十六进制)或十进制值,如 1.234,它分别显示位和指数/尾数。


+- 无穷大由指数=全一,尾数=0 表示。它是无穷大,隐含的位并没有真正的意义。

NaN 表示为指数=全一,尾数=非零(符号位=任一)。尾数是 NaN 的 "payload",并且是任意的。只有谈论实际存在的位才有意义,而不是隐含的位。