你能直接在c系列语言中编码表示为二进制数字的值吗?

时间:2012-02-10 20:02:46

标签: c encoding binary constants

在键入常数时,在基于c的(或c-inspired)语言系列(即C / C ++ / Objective-C / JavaScript)中,您只需直接输入数字作为其十进制值,或者您可以用0x作为前缀,通过十六进制写入。 JavaScript允许您甚至使用Octal编码键入值,方法是在数字前加零(...这对我来说是完全疯狂的,因为09看起来是9但实际上解析为零!方式让人迷惑!应该是{{1 }前缀或类似,但我离题...)

我想知道的是,是否存在直接以二进制方式输入内容的等价物。

例如,我很乐意看到这样的事情:

8x

只是为了好玩,我实际上正在考虑编写一个 pre -pre-compiler来做到这一点,但同样只是为了好玩,因为它当然代码不可移植。

尽管如此,希望有一种标准方法可以做到这一点。当然,是的,用十六进制编码很容易(毕竟你只需要学习15个),但是再一次,只是出于好奇而想知道更多。

但是真的......那个Octal胡说八道真是太糟糕了!如果你问我就疯了!

3 个答案:

答案 0 :(得分:2)

标准C中没有二进制常量。

标准C只有十进制(无前缀),八进制(0前缀)和十六进制(0x0X前缀)常量。 GNU C提供二进制常量作为C的GNU扩展,参见:

6.60使用“0b”前缀的二进制常量

http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html

答案 1 :(得分:1)

在C ++ 11中,您可以使用user-defined literal来完成此任务(尽管您必须定义后缀而不是前缀)。

  

JavaScript甚至允许您使用八进制编码键入值,方法是在数字前加上零[...]该八进制无意义的内容!

是的,C和其他C派生语言也是如此。根据我的理解,在18-bit architectures的用户中,八进制比十六进制更受欢迎(因为一个单词恰好是6个八进制数字;显然4.5个十六进制数字有点尴尬)。但那是在我的时间之前。 ; - )

答案 2 :(得分:0)

没有办法只将二进制常量放入代码中。但你为什么需要?将二进制转换为十六进制很容易。只需将二进制数分组为4个。每组4个代表一个十六进制数字。即。

<00> 0000 - &gt; 0,0001 - &gt; 1,...... 1001 - &gt; 9,1010 - &gt; A,...... 1111 - &gt; ˚F

相关问题