我在C中读到,char实际上是一个整数,因为字符表示为位模式。
所以我想知道你运行你的程序时操作系统如何知道何时将位模式打印为数字或字符。什么代码确定要打印哪个?
并且,ASCII表位于何处,转换如何工作?
答案 0 :(得分:4)
操作系统如何知道何时将位模式打印为数字或字符。
没有。通过向printf
指定正确的 format descriptor ,明确告诉编译器是将其视为字符还是整数。这就是为什么如果格式描述符和实际参数的类型不匹配,那么它会导致未定义的行为。
答案 1 :(得分:3)
这取决于您如何告诉程序解释代码中的位。例如,
printf("%d %c", 'a', 97);
这将打印:97 a
答案 2 :(得分:3)
如果您正在运行Linux机器,只需在终端中键入man ascii,您将看到所有char值(十进制,八进制和六进制)。如果没有,只需谷歌ascii表,你可能会完成。
答案 3 :(得分:0)
...字符表示为位模式。
在计算机上,所有表示为位模式:字符,整数,实数和可执行代码。 8位01000001
可以表示整数65
(尽管整数通常占用至少16位),或ASCII系统中的字母A
。有详细的方法来跟踪什么是什么,它是操作系统和高级编程语言的主要职责之一。 printf
是程序员必须明确告诉函数传递什么类型数据的极少数情况之一。
我在C中读到,char实际上是一个整数,因为字符表示为位模式。
这不太对:在C中,字符和整数在很长一段时间内都是不同的类型。如果需要,C允许您使用char
作为int
,通过选择语言设计者:位模式基本上用作相应的int
。 C不允许你使用float
作为int
,因为位模式不会给你任何有用的东西(1.0
的位模式看起来不像整数{{的位模式1}})。
对于ASCII表,它体现在显示文本的硬件和软件的设计中,以及操纵它的编程语言功能的设计中。计算机 font 是从数字到形状的映射。或“字形”。在最简单的情况下,它将ASCII范围(32-126)中的数字映射到适当的字形。 (实际上,它往往是通往同一结果的更间接的途径)。旧计算机终端的字形硬连线,而Windows或X11应用程序使用软件字体。
对于编程语言,像1
或isdigit()
这样的函数只在其属性表上查找字符代码:isalpha()
为数字48返回isdigit()
-57(编码ASCII数字)和true
用于所有其他数字。不涉及字形。