2018-2019-1 20189215 《深入理解计算机系统》第二章学习总结

《第2章 信息的表示和处理》


研究三种最重要的数字表示:无符号编码、补码编码、浮点数编码。

教材学习内容总结

2.1 信息存储
大多数计算机使用的8位的块,或者字节(byte)作为最小的可寻址的存储器单位,而不是存储器中访问单独的位。机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器。存储器的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能地址的集合称为虚拟地址空间。
2.1.1 十六进制表示法
一个字节由8位组成.二进制表示法中值域是0000000011111111,十六进制使用数字’0’’9’以及字符’A’’F’来表示16个可能的值,一个字节的值域为00FF。
2.1.2 字数据大小
每台计算机都有一个字长,指明整数和指针数据标称大小。字长决定的最重要的系统参数就是虚拟地址空间的最大大小。“32位程序”或“64位程序”的区别在于该程序是如何编译的,而不是其运行的机器类型。
使用确定大小的整数类型是程序员准确控制数据表示的最佳途径。
2.1.3 寻址和字节顺序
小端法和大端法:

  • 小端法——最低有效字节在最前面的方式
  • 大端法——最高有效字节在最前面的方式

2.1.4 表示字符串
在使用ASCII码作为字符码的任何系统上,表示的结果是相同的,与字节顺序和字大小规则无关。因此,文本数据比二进制数据具有更强的平台独立性。
2.1.5 表示代码
不同的机器类型使用不同的且不兼容的指令和编码方式,二进制代码是不兼容的,二进制代码很少能在不同机器和操作系统组合之间移植。
2.1.6 布尔代数简介
二进制值是计算机编码、存储和操作的核心,所以围绕数值0和1的研究已经演化出了丰富的数学知识体系。
四种逻辑运算:~ 非(NOT)、& 与(AND)、| 或(OR)、^ 异或(EXCLUSIVE-OR)。
2.1.7 C语言中的位级运算
C语言一个很有用的特性就是它支持按位布尔运算,确定一个位级表达式的结果的最好的方式,就是将十六进制的参数扩展成二进制表示并执行二进制运算,然后转回十六进制。
2.1.9 C语言中的逻辑运算.
C语言还提供了一组逻辑运算符||(OR)、&&(AND)和!(NOT)。
2.1.10 C语言中的移位运算
C语言还提供了一组移位运算,以便向左或向右移动位模式。右移运算x>>k,左移运算x<<k。
左移运算——x向左移动k位,丢弃最高的k位,在右端补k个0。
右移运算分为逻辑右移和算数右移。

  • 逻辑右移——在左端补k个0。
  • 算术右移——在左端补k个最高有效位的值。

2.2 整数表示
2.2.1 整型数据类型
C语言支持多种整型数据类型—–表示有限范围的整数。每种类型都能用关键字来指定大小,如:char、short、long或者long long。
不同大小的分配的字节数会根据机器的字长和编译器有所不同。
根据字节分配,不同的大小所能表示的值的范围是不同的。
2.2.2 无符号数的编码
无符号的二进制表示有一个很重要的属性,就是每个介于0~(2的w次方)-1之间的数都有唯一一个w位的编码值。
2.2.3 补码编码
最常见的有符号数的计算机表示方式就是补码形式。在这个定义中,将字的最高有效位解释为负权。
每个介于-2的(w-1)次方和(2的w次方)-1之间的整数都有一个唯一长度为w的位向量二进制表示。
2.2.4 有符号数和无符号数之间的转换
C语言允许在各种不同的数字数据类型之间做强制类型转换。
2.2.5 C语言中的有符号数与无符号数
C语言支持所有整型数据类型的有符号和无符号运算。虽然C语言标注没有指定有符号数要采用某种编码表示,但是几乎所有的机器都使用补码。
C语言允许无符号数和有符号数之间的转换,转换的原则是底层的位表示保持不变。
2.2.6 扩展一个数字的位表示
零扩展——将一个无符号数转换为一个更大的数据类型,简单地在表示的开头添加0。
符号扩展——将一个补码数字转换为一个更大的数据类型,在表示中添加最高有效位的值。
2.2.7 截断数字
在一台典型32位机器上,当把int x(x = 53191)强制类型转换为short时,就将32位的int截断为16位的short int。这个16位的位模式就是-12345的补码表示。当把它强制转换回int时,符号扩展把高16位设置为1,从而生成-12345的32位补码表示。
2.3 整数运算和2.4 浮点数介绍了各种计算的公式,分别是无符号加法、补码加法、补码的非、无符号乘法、补码乘法、乘以常数、除以2的幂、浮点运算等,在这里就不摘抄书本啦。
2.4.2 IEEE浮点表示
IEEE浮点标准用V = (-1)^s × M × 2^E的形式来表示一个数:

  • 符号——s决定这数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。
  • 尾数——M是一个二进制小数,它的范围是12-ε,或者是01-ε。
  • 阶码——E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。

教材学习中的问题和解决过程

  • 问题1:浮点数规格化的值,特殊值或者是错误的值怎么处理。

  • 问题1解决方案:此时OS会把符号位、尾数、阶码全都变为0。
    当阶码都为1的时候,如果尾数全为0,那么就要看符号位,如果符号位为1,那么就是负无穷;如果符号位为0那么就是正无穷。
    当尾数不是0的时候,不是一个有效的数字,用NaN(not a number)来代替。

  • 问题2:涉及到运算的公式理解不深刻,公式与计算对不上。

  • 问题2解决方案:没记住各种符号的表示,比如B2T(w位数是下标)是二进制转不码,首先要记住每种符号代表的含义,再多思考、练习公式。

其他

《深入理解计算机系统(第三版)》第二章对我以前所学的知识做了补充与深化,也引起了我对之前知识的一些思考,但是内容太多,对于很多概念性的公式和概念没有很深入的理解掌握,需要花更多时间来真正做到“深入理解”。

学习进度条

章节数(新增/累积) 博客量(新增/累积)
目标 共12章 共12篇
2018.10.21 1/1 1/1
2018.11.04 1/2 1/2

计划在本学期读完,希望自己可以做到。

参考资料

原文地址:https://www.cnblogs.com/jsjliyang/p/9891411.html