hello 程序的生命周期是从一个源程序(或者说源文件)开始的,即程序员通过编辑器创建并保存的文本文件,文件名是 hello.c。源程序实际上就是由一个值 0 和 1 组成的位(又称为比特)序列,8 个位被组织成一组,称为字节,每个字节表示程序中的某些文本字符。
大部分现代计算机系统都使用 ASCII 标准来表示文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符。如下所示,给出了 hello.c 程序的 ASCII 码表示:
# | i | n | c | l | u | d | e | SP | < | s | t | d | i | o | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
35 | 105 | 110 | 99 | 108 | 117 | 100 | 101 | 32 | 60 | 115 | 116 | 100 | 105 | 111 | 46 |
h | > | \n | \n | i | n | t | SP | m | a | i | n | ( | ) | \n | { |
104 | 62 | 10 | 10 | 105 | 110 | 116 | 32 | 109 | 97 | 105 | 110 | 40 | 41 | 10 | 123 |
\n | SP | SP | SP | SP | p | r | i | n | t | f | ( | “ | h | e | l |
10 | 32 | 32 | 32 | 32 | 112 | 114 | 105 | 110 | 116 | 102 | 40 | 34 | 104 | 101 | 108 |
l | o | , | SP | w | o | r | l | d | \ | n | “ | ) | ; | \n | SP |
108 | 111 | 44 | 32 | 119 | 111 | 114 | 108 | 100 | 92 | 110 | 34 | 41 | 59 | 10 | 32 |
SP | SP | SP | r | e | t | u | r | n | SP | 0 | ; | \n | } | \n | |
32 | 32 | 32 | 114 | 101 | 116 | 117 | 114 | 110 | 32 | 48 | 59 | 10 | 125 | 10 |
hello.c 程序是以字节序列的方式储存在文件中的。每个字节都有一个整数值,对应于某些字符。例如,第一个字节的整数值是 35,它对应的就是字符 “#”。第二个字节的整数值为 105,它对应的字符是 “i”,依此类推。注意,每个文本行都是以一个看不见的换行符 ‘\n’ 来结束的,它对应的整数值为 10。像 hello.c 这样只由 ASCII 字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
hello.c 的表示方法说明了一个基本思想:系统中的所有信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。
作为程序员,我们需要了解数字的机器表示方式,因为它们与实际的整数和实数是不同的。它们是对真值的有限近似值,有时候会有意想不到的行为表现。这方面的基本原理将在下一章中详细描述。
网友评论