IEEE - 754 - 找到signbit,exponent,frac,normalized等

ice*_*ted 2 c c++ ieee-754

我接收一个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的范围内,两个指数的幂.