《深入理解计算机系统》学习笔记(二)
1.4 表示字符串
C语言中字符串被编码为一个以nul(其值为0)字符结尾的字符数组。每个字符都由某个标准编码来表示,最常见的是ASCI字符码。因此,如果我们以参数“12345”和6(包括终止符)来运行例程show. _bytes, 我们得到结果31 32 33 34 35 00。请注意,十进制数字x的ASCII码正好是0x3x,而终止字节的十六进制表示为0x00。在使用ASCII码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关。因而,文本数据比二进制数据具有更强的平台独立性。
ASCⅡ字符集适合于编码英语文档。Java编程语言使用Unicode来表示字符串。对应C语言也有支持Unicode的程序库。
1.5 表示代码
考虑下面的C函数:
我们发现指令编码是不同的。不同的机器类型使用不同的且不兼容的指令和编码方式。即使是完全一样的进程,运行在不同的操作系统上也会有不同的编码规则,因此二进制代码是不兼容的。二进制代码很少能在不同机器和操作系统组合之间移植。
计算机系统的一个基本概念就是,从机器的角度来看,程序仅仅只是字节序列。机器没有关于原始源程序的任何信息,除了可能有些用来帮助调试的辅助表以外。
2.1.6 布尔代数简介
二进制值是计算机编码、存储和操作信息的核心,所以围绕数值0和1的研究已经演化出了丰富的数学知识体系。这起源于1850 年前后乔治.布尔(George Boole, 1815- -1864)的工作,因此也称为布尔代数(Boolean algebra)。布尔注意到通过将逻辑值TR