c - 顽固的位不会被设置为一个。

标签 c binary ieee-754 ieee

我有这段代码用于获取 IEEE 二进制数的尾数或值。

iFloat_t floatGetVal (iFloat_t x) {
  iFloat_t mantissa = (BITS == 16) ? (x & 0x03FF)
                      : (x & 0x007FFFFF);
    debug("%s: getVal before implicit 1", getBinary(mantissa));
    //mantissa = (BITS == 16) ? (mantissa | 0x04)
    //                : (mantissa | 0x008);
    mantissa = x | 0000010000000000;
    debug("%s: getVal after implicit 1", getBinary(mantissa));
    mantissa = (BITS == 16) ? (mantissa & 0x07FF)
                      : (mantissa & 0x00FFFFFF);
    if(floatGetSign(x) == 1) {
        mantissa = ~mantissa + 1;
    }
    return mantissa;
}

我的问题是当我尝试从数字 63.125 中获取值时,这是相应的输出:

DEBUG iFloat.c[31] floatGetVal() 0000-0011-1110-0100: getVal before implicit 1
DEBUG iFloat.c[35] floatGetVal() 0101-0011-1110-0100: getVal after implicit 1
DEBUG iFloat.c[81] floatAdd() 0000-0011-1110-0100: bits of val_y after assignment

这是我的预期输出:

DEBUG iFloat.c[31] floatGetVal() 0000-0011-1110-0100: getVal before implicit 1
DEBUG iFloat.c[35] floatGetVal() 0101-0111-1110-0100: getVal after implicit 1
DEBUG iFloat.c[81] floatAdd() 0000-0111-1110-0100: bits of val_y after assignment

这是我的完整代码:

https://pastebin.com/w4UVzmUe

最佳答案

0000010000000000 是八进制,不是二进制,使用十六进制 0x0400

关于c - 顽固的位不会被设置为一个。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249083/

相关文章:

algorithm - 枚举位向量使得不会同时设置两个相邻位的有效方法

c - 增加标准输出缓冲区大小

c++ - vector 和频率搜索

c - 错误的多重定义 - CodeBlocks

bash - 如何只获取二进制文件的前十个字节

javascript - IEEE 754 float 学

c - 用 C 查找下一个 IEEE 754 可表示数(朝向 -INF)?

python - 如何在 Python 中测试负零?

c++ - C/C++ 代码 2nd = 登录操作

c - 声明与全局、局部和静态同名的变量