我正在学习C,我最近发现我们可以用不同的方式表示整数:
(假设i
具有“人类可读”的 512 值。)以下是陈述:
int i = 512;
int i = 01000;
int i = 0x200;
像int i = 1000000000b
这样的东西?这很有趣,但遗憾的是没有C编译器接受该值。
答案 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中执行此操作 - 该语言不适合在二进制文件中指定整数文字。