C中的单个浮点十进制到二进制

Single floating point decimal to binary in C

我正在尝试编写 C 程序,将 float 类型的变量初始化为 1000.565300 并提取 IEEE 754 表示的相关字段。我应该提取符号位(位 31)、指数字段(位 30 到 23)和有效字段(位 22 到 0)。我应该使用 bit masking 和移位操作来提取这些字段。我的程序应将提取的字段保留在 32-bit unsigned integers 中,并应以 hexadecimalbinary 格式打印它们的值。这是我的程序。我不知道如何bit masking

好吧,完成这一切的一个简单方法是:

将浮点位解释为无符号位:uint32_t num = *(uint32_t*)&value

意思是:我想把value的地址当成一个32位无符号的地址,然后我想取那个地址存储的值

签名:int sign = (~(~0u>>1)&num) ? -1 : 1 //checks if first bit of float is 1 or 0 , if it's 1 then it's a negative number

exp 部分:uint32_t exp = num&0x7F800000

尾数:uint32_t mant = num&0x007FFFFF

如果你不知道口罩:

0x7F800000 : 0 11111111 00000000000000000000000

0x007FFFFF : 0 00000000 11111111111111111111111

关于打印位,可以使用这个函数:

void printbits(uint32_t num)
{
    for(uint32_t m=~(~0u>>1);m;m>>=1)  // initial m = 100..0 then 0100..0 and so on
      putchar(n&m ? '1' : '0'); 
    putchar('\n');
}