C表示基数2中的int

Dev*_*oot 13 c binary integer representation

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

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

(假设i"人类可读"的值为512.)以下是表示:

十进制:

int i = 512; 
Run Code Online (Sandbox Code Playgroud)

八:

int i = 01000;
Run Code Online (Sandbox Code Playgroud)

十六进制:

int i = 0x200;
Run Code Online (Sandbox Code Playgroud)

在基数2(或二进制表示)中,5121000000000.怎么用C写这个?

有点像int i = 1000000000b?这很有趣,但遗憾的是没有C编译器接受该值.

zne*_*eak 30

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

int foo = 0b00100101;
Run Code Online (Sandbox Code Playgroud)

如上所述,使用这样的二进制文字将您锁定在Visual Studio的C和C++编译器之外,因此您可能需要注意在何处以及如何使用它们.

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


jas*_*son 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
Run Code Online (Sandbox Code Playgroud)

经过几次尝试在你脑海中进行这种翻译后,你会对它感到非常舒服.(当然,您可以使用八进制执行相同操作,但十六进制比八进制更紧凑.)

对于您的具体示例:

1000000000 -> 10 0000 0000 -> 0010 0000 0000 -> 0x200
Run Code Online (Sandbox Code Playgroud)


pmg*_*pmg 9

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

int i = 1 << 9; /* binary 1 followed by 9 binary 0's */
Run Code Online (Sandbox Code Playgroud)