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

问题描述 投票:0回答:2

这个问题在这里已有答案:

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

例:

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

我们可以用其他形式打印:

  • 八角printf("%o",a);
  • 十进制printf("%d",a);
  • 十六进制printf("%x",a);
c printf
2个回答
4
投票

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

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


1
投票

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

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

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

另见question 20.11中的C FAQ list

© www.soinside.com 2019 - 2024. All rights reserved.