为什么我们不能以十进制,八进制,十六进制形式打印二进制形式的值?

时间:2017-12-28 14:04:33

标签: c printf

为什么我们不能像C编程中的其他人一样打印二进制数字。

示例:

int a=9;  
printf("%b",a);   
我们可以用其他形式打印:

  • 八进制printf("%o",a);
  • 十进制printf("%d",a);
  • 十六进制printf("%x",a);

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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

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

另请参阅question 20.11中的C FAQ list