为什么我们不能以二进制forms打印十进制,八进制,hexforms的值?

为什么我们不能像C编程中那样用二进制打印数字。

例:

int a=9; printf("%b",a); 

我们可以用其他forms打印:

  • 八进制printf("%o",a);
  • decimal printf("%d",a);
  • hexprintf("%x",a);

这本身与C语言无关。 只是,C标准默认情况下没有为printf()和family指定格式说明符来生成二进制表示输出。

您可以随时推出自己的function来完成工作。 有一些版本的C库选择提供格式说明符(也是一个整数后缀)来表示二进制表示,但再一次,这既没有强制要求不受官方标准的约束。

我在这里推测,但是:C最初是由专业的,实践程序员设计和实现的,目的是在其中编写真正的程序。 并且,虽然真正的程序发现一直以十进制和hex打印是必要且有用的,但以二进制打印事物通常并不重要。 这需要很大的空间,如果你是一个专业的程序员,并且你有一个用二进制术语思考的数字,例如某种类型的位掩码,那么以更紧凑的hex表示打印它是传统的,然后如果需要,可以在头脑中转换成二进制文件。

当然,如果没有其他原因,他们的教师总是把它作为练习分配,那么用二进制打印东西对学生程序员来说是非常有趣的。 但当然C从来没有考虑到初学程序员的设计。

如果(如上所述)它是最常见和最有用的十进制和hex,你可能会合理地问,那为什么printf支持%o ? 有人说,答案很简单,八进制是在PDP-11上用机器语言表示机器常数和其他二进制数字的传统方式,这当然是C的原始平台。

另见C FAQ列表中的问题20.11 。