《深入理解计算机系统》学习笔记(二)
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函数:
《深入理解计算机系统》学习笔记(二)1.4~1.6
  我们发现指令编码是不同的。不同的机器类型使用不同的且不兼容的指令和编码方式。即使是完全一样的进程,运行在不同的操作系统上也会有不同的编码规则,因此二进制代码是不兼容的。二进制代码很少能在不同机器和操作系统组合之间移植。
  计算机系统的一个基本概念就是,从机器的角度来看,程序仅仅只是字节序列。机器没有关于原始源程序的任何信息,除了可能有些用来帮助调试的辅助表以外。

2.1.6 布尔代数简介
  二进制值是计算机编码、存储和操作信息的核心,所以围绕数值0和1的研究已经演化出了丰富的数学知识体系。这起源于1850 年前后乔治.布尔(George Boole, 1815- -1864)的工作,因此也称为布尔代数(Boolean algebra)。布尔注意到通过将逻辑值TRUE(真)和FALSE(假)编码为二进制值1和0,能够设计出一种代数,以研究逻辑推理的基本原则。
  最简单的布尔代数是在二元集合{0,1}基础上的定义。图2-7定义了这种布尔代数中的几种运算。我们用来表示这些运算的符号与C语言位级运算使用的符号是相匹配的,这些将在后面讨论到。
  布尔运算&对应于逻辑运算AND,在命题逻辑中用符号A表示。当P和Q都为真时,我们说PAQ为真。相应地,只有当p=1且q=1时,p&q才等于1。布尔运算|对应于逻辑运算OR,在命题逻辑中用符号V表示。当P或者Q为真时,我们说PVQ成立。相应地,当p=1或者q=1时,plq等于1。布尔运算~对应于逻辑运算异或,在命题逻辑中用符号θ表示。当P或者Q为真但不同时为真时,我们说PθQ成立。相应地,当p=1且q=0,或者p=0且q=1时,p^q等于1。
  后来创立信息论领域的Claude Shannon(1916- 2001)首 先建立了布尔代数和数字逻辑之间的联系。他在1937年的硕士论文中表明了布尔代数可以用来设计和分析机电继电器网络。尽管那时计算机技术已经取得了相当的发展,但是布尔代数仍然在数字系统的设计和分析中扮演着重要的角色。
  举个例子,假设w=4,参数a=[0110],b=[1100]。 那么4种运算a&b、a|b、a^b和~b分别得到以下结果:
《深入理解计算机系统》学习笔记(二)1.4~1.6
  布尔值平时写代码时经常接触,在做条件判断时用的比较多。

相关文章:

  • 2022-01-10
  • 2021-10-08
  • 2021-08-15
  • 2021-12-18
  • 2021-12-07
  • 2022-01-01
  • 2022-02-19
猜你喜欢
  • 2021-10-14
  • 2021-08-19
  • 2021-12-31
  • 2022-03-05
  • 2021-08-16
  • 2021-07-27
  • 2021-09-27
相关资源
相似解决方案