深入理解计算机系统CSAPP02 - 信息的表示和处理

02:信息的表示和处理

  • 信息的存储:虚拟地址空间、字节和比特、字长
  • 整数的表示(原码、反码和补码)、整数运算
  • 浮点数的表示的运算

1. 信息的存储

1.1 虚拟地址空间

程序将内存视为一个大数组,数组元素由单个字节组成,每个字节都由一个唯一的数字来表示,称为地址,所有地址的集合称为虚拟地址空间
在这里插入图片描述

1.2 字节(Byte)和比特(bit)

  • 1 Byte = 8 bit
  • 二进制范围 00000000 ~ 11111111 => 十进制范围 0 ~ 255 (2^8-1)

1.3 字数据大小

字长决定了虚拟地址空间的最大范围(字长 w,虚拟地址范围 0 ~ 2^w - 1)
在这里插入图片描述

区别:32 位程序 & 64位程序

  • 代码上:基本数据类型占用的字节长度不同(long、unsigned long、指针: 4bit -> 8bit)
  • 可执行文件上:Class属性标识 ELF32 -> ELF64

1.4 寻址和字节顺序

举个例子:
int 类型变量 x(0x01234567),假设地址位于 0x100 处:

  • 大端法最高有效字节存储在最前面 - IBM 和 Sun 公司机器):
    在这里插入图片描述
  • 小端法(最低有效字节存储在最前面 - Intel兼容机、Android 和 iOS 系统)
  • 双端法(ARM处理器)

1.5 C语言中的位级运算

如何得到操作数的最低有效字节?

&0xFF

2. 整数表示与编码

2.1 数值信息的表示

真值:带有正、负号的二进制数。例如+1010110、-0110101
机器数:用0 和 1 表示正负号的数(0正,1 负)。

常用的机器数编码方法有原码、反码和补

1)原码(正数符号位用0,负数用1)

0的原码不唯一 ([+0]原=00000000、[-0]原=10000000)

为了简化运算器复杂性,提高运算速度,要把减法做成加法运算,因此引入了反码和补码

2)反码

  • 正数的反码与原码相同;
  • 负数的反码是在原码的基础上符号位不变,其余各位按位求反得到的。

例子:

  • X=+1010110, [X]反=[X]原=01010110
  • Y=-0110101, [Y]原=10110101 [Y]反=11001010
  • 0 无正负之分([+0]补=[-0]补=00000000)

3)补码(有符号整数常用补码存储)

  • 正数的补码与原码相同;
  • 负数的补码是在原码的基础上符号位不变,其它位按位取反后,+1(反码 + 1)
  • 补码的补码是原码,即 [[X]补]补=[X]
  • 验证补码的小技巧:[-5]补=1011,最高位1不仅是负号,也是8 => -8 + 2 + 1 = -5
  • 例子:
  • X=+1010110 [X]补=[X]反=[X]原=01010110
  • Y=-0110101 [Y]原=10110101 [Y]补=11001011.

问:8位二进制的补码范围?
-128 ~ 127 (因为正数原码多涵盖了0)
正数原码:0000 0000(0) ~ 0111 1111(127)
负数原码:1000 0000 ~ 1111 1111(-127)
负数补码:1000 0000(-128) ~ 1000 0001(127)

2.2 有符号数和无符号数转换

C 语言会隐式的将有符号数强制转换成无符号数来执行运算
有符号数从一个较小的数据类型转换成较大类型时,进行符号位扩展,可保持数值不变

3. 整数运算

无符号加法 - 溢出判断sum < x
在这里插入图片描述
有符号加法 - 正溢出、负溢出
在这里插入图片描述

4. 浮点数

4.1 含有小数值的二进制数

  • 定点表示法
    在这里插入图片描述
  • IEEE 浮点表示(可有效地表示很大的数)
    在这里插入图片描述
    符号 s、阶码 E 和尾数 M

在这里插入图片描述在这里插入图片描述

4.2 浮点数的数值分类(根据阶码E)

1)规格化的值

阶码字段的二进制位不全为 0,且不全为 1

2)非规格化的值

阶码字段的二进制位全为 0
在这里插入图片描述

3)特殊值

当阶码字段的二进制位全为 1

4.3 舍入

当值x无法用浮点形式精确表示时,想找“最接近的值”来代替它

1)向下舍入和向上舍入

在这里插入图片描述

2)向零舍入

正数向下舍入,负数向上舍入

3)向偶数舍入(向最接近的值进行舍入)

使得一半情况需向上舍入,一半情况需向下舍入

在这里插入图片描述

4.4 浮点运算

  • 浮点数的加法不具有结合性
  • 浮点数的乘法不具有结合性
  • 浮点数的乘法在加法上不具有分配性

5. 参考资料

https://github.com/datawhalechina/team-learning-program/tree/master/ComputerSystems

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深入理解计算机系统(CSAPP)是由Randal E. Bryant和David R. O'Hallaron编写的经典计算机科学教材。该教材通过涵盖计算机体系结构、机器级别表示和程序执行的概念,帮助学生深入理解计算机系统的底层工作原理和运行机制。 深入理解计算机系统的练习题对于学生巩固并应用所学知识非常有帮助。这些练习题涵盖了计算机硬件、操作系统和编译器等多个领域,旨在培养学生解决实际问题和设计高性能软件的能力。 对于深入理解计算机系统的练习题,关键是通过实践进行学习。在解答练习题时,应根据课本提供的相关知识和工具,仔细阅读问题描述,并根据实际需求设计相应的解决方案。 在解答练习题时,需要多角度思考问题。首先,应准确理解题目要求,并设计合适的算法或代码来解决问题。其次,应考虑代码的正确性和效率,以及对系统性能的影响。此外,还要注意处理一些特殊情况和异常情况,避免出现潜在的错误或安全漏洞。 解答练习题的过程中,应注重查阅相关资料和参考优秀的解答。这可以帮助我们扩展对问题的理解,并学习他人的思路和解决方法。同时,还可以通过与同学和老师的讨论,共同探讨问题和学习经验。 总之,通过解答深入理解计算机系统的练习题,可以帮助学生巩固所学知识,同时培养解决实际问题和设计高性能软件的能力。这是一个学以致用的过程,可以加深对计算机系统运行机制和底层工作原理的理解。 ### 回答2: 理解计算机系统(CSAPP)是一本经典的计算机科学教材,通过深入研究计算机系统的各个方面,包括硬件、操作系统和编程环境,对于提高计算机科学专业知识与能力具有很大帮助。 练习题是CSAPP中的重要部分,通过练习题的完成,可以加深对计算机系统的理解,并将理论知识转化为实践能力。练习题的数量、难度逐渐递增,从简单的概念与基础问题到复杂的系统设计与实现。 在解答练习题时,首先需要对题目进行仔细阅读和理解,明确题目的要求和限制条件。然后,可以利用课堂讲解、教材内容、网络资源等进行查阅和学习相应的知识。同时,还可以参考课后习题解答等资料,了解一些常见的解题方法和思路。 在解答练习题时,可以利用计算机系统的工具和环境进行实际测试和验证。例如,可以使用调试器、编译器和模拟器等工具对程序或系统进行分析和测试。这样可以更加深入地理解问题的本质,并找到恰当的解决方法。 另外,解答练习题时还可以与同学、教师和网上社区进行交流和讨论。这样可以互相学习和交流解题思路,共同解决问题。还可以了解不同的解题方法和技巧,提高解题效率和质量。 练习题的解答过程可能会遇到一些困难和挑战,例如理论知识的不足、复杂问题的分析与解决。但是通过不断地思考和实践,相信可以逐渐提高解题能力,更好地理解计算机系统。 总之,深入理解计算机系统(CSAPP)练习题是提高计算机科学专业知识和能力的重要途径。通过仔细阅读和理解题目,查阅相关知识,利用计算机系统工具和环境进行实践,与他人进行交流和讨论,相信可以更好地理解计算机系统的各个方面,并将知识转化为实际能力。 ### 回答3: 《深入理解计算机系统(CSAPP)》是计算机科学领域的经典教材之一,对于深入理解计算机系统的原理、设计和实现起到了极大的帮助。在阅读这本书的过程中,书中的习题也是非常重要的一部分,通过做习题,我们可以更好地理解书中所讲的概念和思想。 CSAPP的习题涵盖了课本中各个章节的内容,从基础的数据表示处理、程序的机器级表示、优化技术、程序的并发与并行等方面进行了深入探讨。通过解答习题,我们可以对这些知识进行实践应用,巩固自己的理解,并培养自己的解决问题的思维方式。 在解答习题时,我们需要充分理解题目要求和条件,并从知识的角度进行分析。有些习题可能需要进行一些编程实践,我们可以通过编程实现来验证和测试我们的思路和解决方案。在解答问题时,我们还可以查阅一些参考资料和网上资源,充分利用互联网的学习资源。 在解答习题时,我们需要保持积极的思维和态度。可能会遇到一些困难和挑战,但是通过坚持和努力,我们可以克服这些困难,提高我们的解决问题的能力。同时,我们还可以通过与同学或者其他人进行讨论,相互分享解题经验和思路,从而更好地理解问题。 综上所述,通过深入理解计算机系统(CSAPP)的习题,我们可以进一步巩固和深化对计算机系统的理解。掌握这些知识,不仅可以提高我们在计算机领域的能力,还可以为我们未来的学习和职业发展奠定重要的基础。因此,认真对待CSAPP的习题,是我们在学习计算机系统知识中不可或缺的一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值