这是我打印浮点尾数的代码。存储在$ t1中的值是值0xBEDCFFFF,其尾数为10111001111111111111111.我的代码打印出来时没有开头的那个。如何在必要时编写子句以输入一个或零的隐藏位?
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
答案 0 :(得分:2)
目前尚不清楚“帐户”是什么意思。如果要打印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。
+ - 无穷大由exponent = all-1,尾数= 0表示。这是无限的,隐含的位没有真正意义。
NaN由exponent = all-1表示,尾数=非零(符号位=或者)。尾数是NaN的“有效载荷”,并且是任意的。讨论实际存在的位而不是隐含的位是唯一有意义的。