我能否在C或C++中使用二进制字面量?

241

我需要处理一个二进制数。

我尝试写了以下代码:

const char x = 00010000;
但这并没有起作用。 我知道可以使用一个十六进制数,它具有与00010000相同的值,但我想知道在C++中是否有一种二进制数类型,如果没有,是否有其他解决方案?

61
你知道00010000是八进制吗?(而且你的声明缺少类型。) - Keith Thompson
2
C++14增加了这个功能。请查看我在底部的新答案以获取更多详细信息。当然,它需要一个实现它的编译器。 - László Papp
@KeithThompson 这些是用来唯一识别给定基数的数字的约定吗?因为 x 不是十六进制 (A, B, C, D, E, F),在二进制或十六进制数字前面写零不会影响它们中的任何一个,所以选择 0b 作为二进制的前缀是否是任意的呢? - Aurelius
1
@FormlessCloud:这些是C和C++标准中给出的语法规则(0b仅出现在C++14中)。它们旨在保持明确无歧义。 - Keith Thompson
3
可能是二进制字面量? 的重复问题。 - M.J. Rayburn
显示剩余4条评论
24个回答

0
这是我的函数,没有添加 Boost 库:
用法:BOOST_BINARY(00010001);
int BOOST_BINARY(int a){
    int b = 0;
    
    for (int i = 0;i < 8;i++){
        b += a % 10 << i;
        a = a / 10;
    }
    
    return b;
}

1
请勿通过破坏自己的帖子给他人增加工作量。在 Stack Exchange(SE)网络上发布帖子,即表示您已授予SE使用CC BY-SA许可证下内容分发的不可撤销权利(无论您对未来选择如何)。根据SE的政策,仅分发非破坏性编辑的版本。因此,任何此类破坏性编辑都将被撤消。有关在该网站上删除内容的详细信息,请参见删除的工作原理是什么? - Ryan M
另外,我已经为您修复了代码格式,以防这是您删除内容的原因。 - Ryan M
这个答案没有为问题提供任何新的见解,其可用性仅限于最多9位二进制数字。 - zkoza

-1

C++提供了一个名为std::bitset的标准模板。如果你喜欢,可以试试。


-2

用法:BINARY(00010001);

int BINARY(int a){ int b = 0;

for (int i = 0;i < 8;i++){
    b += a % 10 << i;
    a = a / 10;
}

return b;

}


您已经发布了此答案 - Eric Aya

-10
你可以尝试使用一个布尔数组:
bool i[8] = {0,0,1,1,0,1,0,1}

3
很多踩票,没有解释。这里是你的解释:https://dev59.com/LHI95IYBdhLWcg3w_zMN此外,数组中的每个元素都位于不同的内存地址上。 但我们想要一个在一个地址上连续打包的1和0序列。 - KANJICODER
关于这个问题,还有一件事情就是它对内存的使用非常大。我建议编写一个函数来更好地表示二进制数字,以便于操作。 - Daniel Kaczmarczyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接