我正在为今年的计算机体系结构考试做准备,而且我正在解决前几年的一些考试,但我有一个我无法解决的练习.当给出以下C和汇编代码时,我被要求找到gz的值:
您可以在汇编代码中看到值$ 0x41300000写入z,但这可能是十进制的?我试图在g和g + 4(x和y)的值之间找到一些模式,但我似乎找不到任何东西.
有任何想法吗?
这看起来像典型的IEEE754(感谢校正)浮点数表示,在现代硬件上,浮点数通过符号位,指数的一系列位以及尾数中的其余位表示在存储器中(在这种情况下,由IEEE规定.
在这种情况下,z的值是十六进制0x4130 0000,它出现在11.
以下是您如何使用1.0(0x3F80 0000)的示例和低于该值的示例.
0x3 F 8 0 0 0 0 0
b0011 1111 1000 0000 0000 0000 0000 0000
sign = b0 = 0 = +
exponent = b0111 1111 = 127 - 127 = 0
mantissa = b000 0000 0000 0000 0000 0000 = 0 + 1 = 1
= 1 * 2^0 = 1 * 1 = 1
0x4 1 3 0 0 0 0 0
b0100 0001 0011 0000 0000 0000 0000 0000
sign = b0 = 0 = +
exponent = b1000 0010 = 130 - 127 = 3
mantissa = b011 0000 0000 0000 0000 0000 = .375 + 1 = 1.375
= 1.375 * 2^3 = 1.375 * 8 = 11
Run Code Online (Sandbox Code Playgroud)
source:浮点数如何存储在内存中?