CSAPP-第二章

第二章:信息的表示和处理

整数的表示虽然只能编码一个相对较小的数值范围,但是这种表示是精确的

浮点数虽然可以编码一个较大的数值范围,但是这种表示只是近似的

信息存储

大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位

机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都有一个唯一的数字来表示,称为它的地址,所有可能地址的集合就称为虚拟地址空间

C语言中一个指针的值是某个存储块的第一个字节的虚拟地址。

每个程序对象可以简单地是为一个字节块,而程序本身就是一个字节序列

十六进制

十进制转十六进制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MkU5RxDX-1652024912871)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220426172212323.png)]

十六进制转十进制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICmIPGHZ-1652024912872)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220426172227859.png)]

字数据大小

字长:每个字所包含的位数

字长决定虚拟空间的最大大小,对于一个字长为w位的机器而言,虚拟地址的范围为:0~2的w次方-1,程序最多访问2的w次方个字节

我们将程序称为32位程序或64位程序,区别在于该程序是如何编译的,而不是器运行的机器类型

32位机器与64位机器表示的就是虚拟地址空间,大多数64位机器也可以运行32位机器编译的程序,这是一种向后兼容

1kb=1024字节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6bAfXIt-1652024912873)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220426173715881.png)]

char也能用来存储整数值

大多数数据类型编码默认为有符号型

寻址和字节顺序

在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址

表示字符串

C语言中字符串被编码为一个null(其值为0)字符结尾的字符数组。终止字节的十六进制表示为0x00

位级运算

确定一个位级表达式的结果最好的方法,就是将十六进制的参数扩展成二进制表示并执行二进制运算,然后再转换回十六进制

移位运算
左移

x<<k,x向左移动k位,丢弃最高的k位,并在右端补k个0

右移

x>>k

逻辑右移:在左端补k个0

算术右移:在左端补k个最高有效位的值

几乎所有的编译器/机器组合都对有符号数使用算术右移

对于无符号数,右移必须是逻辑的

整数表示

原码

原码就是机器码。
1的原码是0000 0001,-1的原码是1000 0001

补码编码

为什么存在补码:希望只有一个0

最高有效位位符号位,符号位被设置为1时,表示值为负,设置为0时,表示值为非负

对于补码0001:十进制为1

对于补码1111:(-1*2的三次方+1 * 2的平方+1 * 2的一次方+1 * 2的零次方= -1

补码=反码+1

反码

正数的反码是其本身。
负数的反码是其原码除符号位以外其余各位按位取反。-5的反码是1111 1010。

为什么使用原码、反码和补码

原码、反码、补码之间的相互关系 - xfcao - 博客园 (cnblogs.com)

有符号数和无符号数之间转换

强制类型转换的结果保持位置不变

补码转换为无符号数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9LaQ0PiM-1652024912874)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503164840210.png)]

无符号数转换为补码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1BPEPKgu-1652024912875)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503165040147.png)]

C语言中的有符号数和无符号数

创建一个无符号常量,必须加上后缀字符‘U’或‘u’

当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式的将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算

扩展一个数字的位表示

一个常见的运算是在不同字长的整数之间转换,同时又保持数值不变

要将一个无符号数转换为一个更大的数据类型,我们只要简单地在表示的开头添加0,这种运算被称为零扩展

要将一个补码数字转换为一个更大的数据类型,可以执行一个符号扩展,在表示中添加最高有效位的值

符号扩展保持数值不变

补码截断要将最高位转换为符号位

整数运算
无符号数加法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g2dBcZig-1652024912876)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503165834029.png)]

检测无符号数加法中的溢出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AbPCtUcl-1652024912877)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503165958869.png)]

无符号数求反

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ByjiLTmw-1652024912878)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170055949.png)]

补码加法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AT3MdKh8-1652024912878)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170134374.png)]

补码的非

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-incofbjk-1652024912879)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170225549.png)]

无符号数乘法

对于两个w位的无符号数,无符号数乘积的取值范围可能需要2w位来表示,不过C语言中的无符号乘法被定义为产生w位的值,就是2w位的整数乘积的低w位表示的值

相当于截断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhHZ7Q4w-1652024912880)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170510735.png)]

补码乘法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CMwpLJ6Y-1652024912881)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503170927417.png)]

乘2的幂

在右边增加k个0

除以2的幂

除以2的幂也可以用移位运算来实现,只不过我们用的是右移而不是左移无符号和补码数分别使用逻辑移位和算术移位来达到目的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDGuEV6w-1652024912882)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503171600949.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kUjtuN56-1652024912883)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503171825978.png)]

不加修正为向下舍入,加修正为向上舍入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-noEOUsbl-1652024912884)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503171718349.png)]

浮点数

二进制小数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uiWpYDLN-1652024912884)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503172026426.png)]

二进制小数点向左移动一位相当于这个数被2除

二进制小数点向右移动一位相当于将该数乘2

小数的二进制表示法只能表示那些能够被写成x乘2的y次方的数,其他的值只能被近似地表示

增加二进制表示地长度可以提高表示的精度

IEEE浮点数表示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8W8yq2U-1652024912885)(C:\Users\83989\AppData\Roaming\Typora\typora-user-images\image-20220503172814393.png)]

浮点运算

定义1/-0将产生负无穷

定义1/+0将产生正无穷

浮点加法不具有结合性

从float或者double转换成int,值将会向0舍入,1.999将被转换成1,-1.999将被转换成-1

C语言中的浮点数

大多数机器对浮点数使用IEEE标准754编码,但C语言中没有明确的标准

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《CSAPP第三版中文PDF》是指《深入理解计算机系统》(Computer Systems: A Programmer's Perspective)这本书的中文翻译版。这本书是由Randal E. Bryant和David R. O'Hallaron共同编写的,旨在帮助读者深入理解计算机系统的工作原理和设计思想。 该书分为主要的十四章,内容涵盖了计算机系统的方方面面,从程序的执行和优化,到处理器的设计和优化,再到内存层次结构和虚拟内存管理。书中包含了大量的实例和代码,以帮助读者理解和实践所学的概念。 这本书的第三版在第二版的基础上进行了全面的更新和扩展。新版增加了对多核处理器、并行计算和网络编程等新兴领域的讨论,使读者能够更好地了解当代计算机系统的工作原理。 《CSAPP第三版中文PDF》的中文翻译版提供了更便捷的学习途径,使更多的中文读者能够通过这本书深入了解计算机系统。无论是对于计算机专业的学生,还是对于从事软件开发或系统维护工作的技术人员,这本书都是一本非常宝贵的参考书。通过阅读这本书,读者可以更全面地掌握计算机系统的原理和知识,提升自己在计算机领域的理解和能力。 ### 回答2: 《深入理解计算机系统(第三版)》是由Randal E. Bryant和David R. O'Hallaron合著的一本计算机科学教材,也被称为CSAPP。这本书提供了一个全面而深入的视角来理解计算机系统的内部工作原理。 《深入理解计算机系统(第三版)》通过逐步解释计算机系统的各个组成部分,从硬件基础、系统软件、过程级并发性到存储器层次结构等,使读者能够获得对计算机系统设计和优化的全面认识。书中的例子和练习旨在帮助读者思考和解决各种计算机系统问题。 该书有如下特点: 1. 着重于概念和原则:CSAPP并不仅仅关注于具体技术和工具,它更关注理解计算机系统的基本原理和概念。这使得读者能够适应各种计算机系统,并可以将其应用到其他类似的系统中。 2. 强调实际应用:书中提供了许多例子和实践,这些都是真实世界中计算机系统的典型问题和解决方案。这使得读者能够更好地将理论知识应用于实际工作中。 3. 全面而深入:CSAPP从底层到顶层逐渐延伸,从而形成一个全面而深入的计算机系统的学习路径。这使得读者能够快速了解计算机系统的整体结构和工作原理。 4. 结构清晰:书中的章节和内容组织架构清晰,逻辑性强。这使得读者可以根据自己的需求和兴趣来选择阅读和学习的内容。 总结起来,《深入理解计算机系统(第三版)》是一本具有全面性、深入性和实用性的计算机系统教材。通过阅读这本书,读者可以深入理解计算机系统的内部工作原理,迅速适应各种计算机系统,并将理论知识应用于实际工作中。这本书对于计算机科学和工程领域的学生和从业人员都是一本不可或缺的指导书。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值