14

可能重复:
我可以在 C 或 C++ 中使用二进制文字吗?

我正在学习 C,我最近发现我们可以用不同的方式表示整数,比如:

(假设i“人类可读”值为512。)以下是表示:

十进制:

int i = 512; 

八进制:

int i = 01000;

十六进制:

int i = 0x200;

在基数 2(或二进制表示)中, 5121000000000。如何用 C 写这个?

int i = 1000000000b什么?这很有趣,但不幸的是没有 C 编译器接受这个值。

4

4 回答 4

34

该标准描述了无法创建“二进制文字”的方法。但是,最新版本的 GCC 和 Clang 使用类似于十六进制语法的语法支持此功能,除了它b不是x

int foo = 0b00100101;

如前所述,使用此类二进制文字会将您锁定在 Visual Studio 的 C 和 C++ 编译器之外,因此您可能需要注意使用它们的位置和方式。

C++14(我知道,我知道,这不是 C)标准化了对二进制文字的支持。

于 2011-06-20T15:53:10.113 回答
12

你不能在 C 中做到这一点。

但是你说你正在学习 C++。在 C++ 中,您可以使用BOOST_BINARY直到 C++0x,这将允许用户定义文字

但是请注意,将十六进制转换为二进制并返回非常容易。

对于给定的二进制数,只需将数字分成四组并学习

0000 <-> 0  
0001 <-> 1  
0010 <-> 2   
0011 <-> 3
0100 <-> 4
0101 <-> 5
0110 <-> 6
0111 <-> 7
1000 <-> 8
1001 <-> 9
1010 <-> A
1011 <-> B
1100 <-> C
1101 <-> D
1110 <-> E
1111 <-> F

经过几次尝试在你的脑海中进行这种翻译后,你会变得非常舒服。(当然,你可以用八进制做同样的事情,但是十六进制比八进制更紧凑。)

对于您的具体示例:

1000000000 -> 10 0000 0000 -> 0010 0000 0000 -> 0x200
于 2011-06-20T15:53:25.667 回答
9

在 C(我相信 C++)中,数字没有二进制表示。但是,对于您显示的简单数字,您可以使用快捷方式

int i = 1 << 9; /* binary 1 followed by 9 binary 0's */
于 2011-06-20T15:53:28.537 回答
3

你不能在标准 C 中做到这一点——该语言不适合在二进制中指定整数文字。

于 2011-06-20T15:52:42.123 回答