我将 8 位十六进制数作为 IEEE 754 位浮点数
我想打印有关该数字的信息(signbit、expbits、fractbits、标准化、
非规格化、无穷大、零、NAN)浮点应该是单个。
我读了位移位,我想这就是我应该做的事情?然而,我并不是100%确定。据我所知,符号位位于数字的最左边位置。表示正或负。我要移动多少才能找到每个?我要不断地移动它来找到每一个吗?有人可以解释一下我如何找到每一个吗?
我会移动 1 来找到符号位吗?
我需要移动 8 才能得到指数吗?
我需要移动 23 才能得到 frac 吗?
符号位应该为零
expbits 应该是 128
fracbits 应该是 0x00000000
我认为...
如果是这样,我换班后如何测试?
这就是我到目前为止所拥有的
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
short wordOrder = 0x0100;
int HexNumber;
printf("Hex IEEE - 754\n");
if(wordOrder == 0x0100)
{
printf("\nbyte order: big-endian\n");
}
else
{
printf("byte order: little-endian\n");
}
printf("\n>");
scanf("%x", &HexNumber);
printf("\n%#x",HexNumber);
return 0;
}
我的输入(scanf)
就我想要的方式..
>40000000
0x40000000
这就是它在做什么..
对于单精度数,高位是符号,接下来的 8 位是指数,其余 23 位是尾数。所以...
bool negative = !!(HexNumber & 0x80000000);
int exponent = (HexNumber & 0x7f800000) >> 23;
int mantissa = (HexNumber & 0x007FFFFF);
如果指数为 255,则该数字为 +- 无穷大或 NaN,具体取决于尾数是否为零(0 表示无穷大)。
如果指数为零,则该数字为零(如果尾数为零)或尾数是实际的非标准化分数值。
如果指数是其他值,则分数顶部有一个隐藏的 1 位,使其成为 24 位。在这种情况下,实际指数可以通过从指数中减去 127 来计算,使其在 -127 到 +127 的范围内,即两个指数的幂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)