信息就是位+上下文
每一个c语言程序的生命周期都是由一个以.c为后缀的源文件开始的,每一个这样的源文件实际上都是有0和1组成的位(bit)序列,8个位被组织成一组,称为字节,每个字节表示程序中的某个相应文本字符。
大部分的现代系统都使用ASCII标准来表示文本字符(即ASCII码表),这种方式就是用一个唯一的单字节大小(8 bit,00000000 - 11111111, 即十进制的 0 - 127)的整数值来表示每个字符。
hello.c程序
#include <stdio.h>
int main()
{
printf("hello, world\n");
}
hello.c程序的ASCII码表示
# | i | n | c | l | u | d | e | <sp> | < | s | t | d | i | o | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
35 | 106 | 110 | 99 | 108 | 117 | 100 | 101 | 32 | 60 | 115 | 116 | 100 | 105 | 111 | 46 |
h | > | \n | i | n | t | <sp> | m | a | i | n | ( | ) | \n | { | \n |
104 | 62 | 10 | 105 | 110 | 116 | 32 | 109 | 97 | 105 | 110 | 40 | 41 | 10 | 123 | 10 |
<sp> | <sp> | <sp> | <sp> | p | r | i | n | t | f | ( | " | h | a | l | l |
32 | 32 | 32 | 32 | 112 | 114 | 105 | 110 | 116 | 102 | 40 | 34 | 104 | 101 | 108 | 108 |
o | , | <sp> | w | o | r | l | d | \ | n | " | ) | ; | \n | } | |
111 | 44 | 32 | 119 | 111 | 114 | 108 | 100 | 92 | 110 | 34 | 41 | 59 | 10 | 125 |
像这种hello.c的源程序以字节序列的方式存储在文件中。每个字节都有一个整数值(在计算机中是以8位二进制形式存在),而该整数值对应于某个字符。注意,每个文本行都是以一个不可见的换行符“\n”来结束的,它所对应的整数值为10。这种只有ASCII字符构成的文件称为文本文件,除文本文件外的所有其他文件都被称为二进制文件。
hello.c的表示方法说明了一个基本思想:系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是有一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文,这里上下文的意思是相同的东西在不同的地方表示不同的含义,比如,在不同的上下文中,一个同样的字节序列,既可能表示一个机器指令,也可能表示一个字符串。
最后来看一下标题,计算机中存储的所有东西都可以说是信息(包括文件、程序、数据等),而信息在计算机中全部由一串位表示(即01组成的序列),区分不同信息只能靠读信息的上下文,所以位+上下文可以唯一确定计算机中一个具体的信息。
深入理解计算机系统笔记: