我接收一个8位十六进制数作为IEEE 754位浮点数,我想打印有关该数字的信息(signbit,expbits,fractbits,normalized,denormalized,infinity,zero,NAN)浮点应该是单个.
我读了一下比特移位,我想这就是我想这样做的原因吗?但是,我并非100%肯定.我知道符号位位于数字的最左侧位置.表示正面或负面.我将它移动多少才能找到每个?我只是继续转移它找到每一个?谁能解释我是如何找到每一个人的?
我会换1来找到标志吗?我会换8来得到指数吗?我会换23来获得压裂吗?
signbit应为零
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;
}
Run Code Online (Sandbox Code Playgroud)
我的输入(scanf)我想要的方式..
>40000000
0x40000000
Run Code Online (Sandbox Code Playgroud)
它正在做什么..
Ric*_*ton 13
对于单精度数,高位是符号,接下来的8位是指数,剩下的23位是尾数.所以...
bool negative = !!(HexNumber & 0x80000000);
int exponent = (HexNumber & 0x7f800000) >> 23;
int mantissa = (HexNumber & 0x007FFFFF);
Run Code Online (Sandbox Code Playgroud)
如果指数为255,则数字为+ - 无穷大或NaN,具体取决于尾数是否为零(0表示无穷大).如果指数为零,则以太数字为+ - 零(如果尾数为零)或者尾数是实际的非标准化小数值.
如果指数是其他任何东西,则在分数的顶部有一个隐藏的位,使其为24位.在这种情况下,可以通过从指数中减去127来计算实际指数,使得它在-127到+127的范围内,两个指数的幂.