首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >固执的比特不会被设置为1。

固执的比特不会被设置为1。
EN

Stack Overflow用户
提问于 2018-09-10 06:23:12
回答 2查看 132关注 0票数 0

我使用下面的代码来获取IEEE二进制数的尾数或值。

代码语言:javascript
复制
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中获取值时,以下是相应的输出:

代码语言:javascript
复制
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

这是我的预期输出:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-10 06:33:00

0000010000000000是一个八进制文字,而不是二进制文字,请使用十六进制的0x0400

票数 7
EN

Stack Overflow用户

发布于 2018-09-10 12:16:56

在标准C中没有二进制常量,所以你不能有像0b0000010000000000这样的常量。但GCC有一个extension,可以用0b0B前缀来支持它们。

如果你不是在使用GCC,那么最好遵循@zch提供的建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52249083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档