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