在 C 中,为什么没有标准说明符以二进制格式打印数字,例如 %b
。当然,可以编写一些函数/黑客来做到这一点,但我想知道为什么这么简单的事情不是语言的标准部分。
背后是否有一些设计决定?由于八进制 %o 有格式说明符,十六进制有 %x 格式说明符,所以八进制和十六进制在某种程度上比二进制表示“更重要”。
因为在 C/C++ 中经常遇到按位运算符,所以我认为使用 %b
或直接将数字的二进制表示形式输入变量(输入十六进制的方式)会很有用像 int i=0xf2
)
注意:类似 this 的主题只讨论这样做的“如何”部分,而不是“为什么”
最佳答案
我相信主要原因是“历史”。 AT&T 的 printf()
等人的原始实现者不需要二进制,但确实需要八进制和十六进制(以及十进制),所以这就是实现的内容。 C89 标准在标准化现有实践方面相当谨慎——总的来说。有几个新部分(语言环境,当然还有函数原型(prototype),尽管有 C++ 为它们提供“实现体验”)。
您可以使用 strtol()
等读取二进制数;指定基数为 2。我认为没有一种方便的方法可以将不同基数(8、10、16 除外)的数字格式化为 strtol()
的反函数 - 大概应该是ltostr()
.
关于c - C 中的二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372646/