《深入理解计算机系统》第2章 信息的表示与处理 章节小结

文章探讨了计算机如何使用位和字节编码整数、实数和字符串,强调了补码和IEEE754标准在浮点数编码中的作用。提到编程中需要注意的溢出问题,以及C语言中不同类型转换的潜在风险。同时,提到了位操作的优化技巧和浮点运算的有限精度带来的挑战。
摘要由CSDN通过智能技术生成

在这里插入图片描述

第二章 信息的表示和处理

​ 计算机将信息编码转换为位(比特),通常组织成字节序列,有不同的编码方式来表示整数、实数和字符串。不同的计算机模型在编码数字和多字节数据中的字节顺序时使用不同的约定。

​ C语言的设计可以包容多种不同字长和数字编码的实现。64位机器也可以运行为32位机器编译的程序,64位程序的优势是可以突破32位程序具有的4GB地址限制

​ 大多数机器对整数使用补码编码,对浮点数使用IEEE标准754编码。在位级上理解这些编码,并且理解算数运算的数学特性,对于想使编写的程序能在全部数值范围上正确运算的程序员来说,是很重要的。

​ 在相同长度的无符号和有符号整数之间进行强制类型转换时,大多数C语言实现遵循的原则是底层的位模式不变。在补码机器上,对于一个w位的值,这种行为是由函数T2UwU2Tw来描述的。C语言隐式的强制类型转换会出现许多程序员无法预计的结果,常常导致程序错误。

​ 由于编码的长度有限,与传统整数和实数运算相比,计算机运算具有非常不同的属性。当超出表示范围时,有限长度能够引起数值溢出。当浮点数非常接近于0.0,从而转换成零时,也会下溢。

​ 和大多数其他程序语言一样,C语言实现的有限整数运算和真实的整数运算相比,有一些特殊的属性。例如,由于溢出,表达式x*x会得出负数。但是,无符号数和补码的运算都满足整数运算的许多其他属性,包括结合律、交换律和分配律。这就允许编译器做很多的优化。例如,用(x<<3)-x取代表达式7*x时,我们就利用了结合律、交换律和分配律的属性,还利用了移位和乘以2的幂之间的关系。

​ 我们已经看到了几种使用位级运算和算数运算组合的聪明方法。例如,使用补码运算,~x+1 == -x。另外,假设我们想要以恶搞形如[0, …, 0, 1, …, 1]的位模式,由w-k个0后面紧跟着k个1组成。这些位模式有助于掩码运算,这种模型能够通过C表达式(1<<k)-1生成,利用的是这样一个属性,即我们想要的位模式数值为2k-1。例如,表达式(1<<8)-1将产生位模式0xFF

​ 浮点表示通过将数字编码为X·2y的形式来近似地表示实数。最常见的浮点表示方法是由IEEE标准754定义的。它提供了几种不同的精度,最常见的是单精度(32位)和双精度(64位)。IEEE浮点也能够表示特殊值正无穷、负无穷和NaN。

​ 必须非常小心地使用浮点运算,因为浮点运算只有有限的范围和精度,而且并不遵守普遍的算数属性如结合性

参考文献:《深入理解计算机系统》[美] 兰德尔E·布莱恩特 & 大卫R·奥哈拉伦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeonardoSya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值