c - C 中的单浮点十进制到二进制

标签 c binary floating-point decimal

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

最佳答案

嗯,完成这一切的一种简单方法是:

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

这意味着:我想将 value 的地址视为 32 位无符号地址,然后我想获取存储在该地址的值

符号:int 符号 = (~(~0u>>1)&num) ? -1 : 1//检查float的第一位是1还是0,如果是1则为负数

exp部分:uint32_t exp = num&0x7F800000

尾数:uint32_t mant = num&0x007FFFFF

如果你不知道面具:

0x7F800000:0 11111111 000000000000000000000000

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');
}

关于c - C 中的单浮点十进制到二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34836075/

相关文章:

c - 如何知道中断后内核开始执行的时间?

c - 为什么我不能对 SDL 纹理使用 colorkey?

C:为什么为 int 参数传递 float/double 文字不会引发警告?

c++ - 在 C++ 中逐行读取二进制文件

c++ - 是否有一个C++函数可以准确返回内置CPU运算RSQRTSS求平方根倒数的值?

c - 如何用整数进行浮点计算

ruby - 截断 float 而不向上舍入

c - 使用 CMake 设置平台特定/编译器特定的目标属性

转为二进制。读入数据片给出零结果

binary - 为什么负归一化浮点二进制数不能以 11 开头?