C表示基数2中的int

时间:2011-06-20 15:50:12

标签: c binary integer representation

  

可能重复:
  Can I use a binary literal in C or C++?

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

(假设i具有“人类可读”的 512 值。)以下是陈述:

十进制:

int i = 512; 

八路:

int i = 01000;

十六进制:

int i = 0x200;

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

int i = 1000000000b这样的东西?这很有趣,但遗憾的是没有C编译器接受该值。

4 个答案:

答案 0 :(得分:30)

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

int foo = 0b00100101;

如前所述,使用这样的二进制文字会阻止您使用Visual Studio的C和C ++编译器,因此您可能需要注意在何处以及如何使用它们。

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

答案 1 :(得分:12)

你无法在C中执行此操作。

但是你说你正在学习C ++。在C ++中,您可以使用BOOST_BINARY直到C ++ 0x,这将允许user-defined literals

但请注意,将十六进制转换为二进制和后退非常容易。

对于给定的二进制数,只需将数字分组为四个,并了解

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

答案 2 :(得分:9)

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

int i = 1 << 9; /* binary 1 followed by 9 binary 0's */

答案 3 :(得分:2)

您无法在标准C中执行此操作 - 该语言不适合在二进制文件中指定整数文字。