【问题标题】:Floating Point representation in Binary二进制中的浮点表示
【发布时间】:2018-04-10 21:58:06
【问题描述】:

我正在尝试打印存储在 C 中的浮点数中的数字,但我正在努力如何打印出来。 我现在正在这样做,它以 IEEE 格式打印数字。我希望它直接从记忆中反向打印。 我该如何解决? 谢谢

void printbits(size_t n, void *c) {
    unsigned char *t = c; 
    if (c == NULL) 
        return; 
    while (n > 0) { 
        int q; 
        --n;
        for(q = 0x80; q; q >>= 1) 
            printf("%x", !!(t[n] & q));
        } 
}

【问题讨论】:

标签: c binary floating-point bits ieee


【解决方案1】:

使用联合:

union u {
    float f;
    unsigned char p[4];
}

然后u.f = myfloat; 并迭代u.p

【讨论】:

  • @MFisherKDX,注意 char 的大小在 c 中可能会有所不同,在 ANSI c 标准中使用联合的两个成员也是未定义的行为
  • @user3076936 嗯...我认为 sizeof(char) 保证为 1。
  • @MFisherKDX 你是对的,sizeof(char) 保证为 1,因为 sizeof 返回 chars 中对象的大小,但它不保证 char 有 8 位
  • @user3076936 所以我们一直都是这种模式。这是错的吗? unsigned char c = (x >> 8)&0xff
  • @MFisherKDX 是的,在 ANSI c 中会更正确: unsigned char c = (x >> CHAR_BIT) &((char)(-1));
猜你喜欢
  • 2016-05-01
  • 2017-06-16
  • 2020-08-07
  • 2015-12-02
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多