c - C 中的二进制表示

标签 c binary printf

在 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/

相关文章:

c - 在 C 中创建二叉搜索树的段错误

python - 如何在 python 中将文件中的二进制数据转换为可读的基二二进制文件?

python - 有效地查找 numpy 数组中二进制字符串中的位位置

c - 使用 dup2 重定向 printf 失败

c - 执行 printf() 和 Segmentation Fault

c - For 循环交替 printf

c - 我不明白为什么以下代码会给我“段错误(核心已转储)”

CMake : different configure_file() for each target

c - 对静态库中符号的 undefined reference

java - 在 Java 与 C++ 中读取二进制文件