为什么我们不能像C编程中的其他人一样打印二进制数字。
示例:
int a=9;
printf("%b",a);
我们可以用其他形式打印:
printf("%o",a);
printf("%d",a);
printf("%x",a);
答案 0 :(得分:4)
这本身与C语言无关。只是,默认情况下,C标准没有为printf()
和family指定格式说明符来生成二进制表示输出。
您可以随时推出自己的功能来完成工作。有些版本的C库选择提供格式说明符(也是一个整数后缀)来表示二进制表示,但再一次,这并不是官方标准规定的。
答案 1 :(得分:1)
我在这里推测,但是:C最初是由专业的,实践程序员设计和实现的,目的是在其中编写真正的程序。并且,虽然真正的程序发现一直以十进制和十六进制打印是必要且有用的,但以二进制打印事物通常并不重要。这需要很大的空间,如果你是一名专业的程序员,并且你有一个用二进制术语思考的数字,例如某种类型的位掩码,以更紧凑的十六进制表示形式打印它是传统的,如果需要,可以在头部转换为二进制。
当然,对于学生程序员来说,以二进制方式打印东西是非常有趣的,如果没有其他原因,他们的教师总是把它作为练习分配。但当然C从来没有考虑到初学程序员的设计。
如果(如上所述)它是最常见且最有用的十进制和十六进制,您可以合理地询问,为什么 printf
支持%o
?有人说,答案很简单,八进制是在PDP-11上用机器语言表示机器常数和其他二进制数字的传统方式,这当然是C的原始平台。
另请参阅question 20.11中的C FAQ list。