计算机将信息编码为位(比特),通常组织成字节序列。有不同的编码方式用来表示整数、实数和字符串。不同的计算机模型在编码数字和多字节数据中的字节顺序上使用不同的约定。
C语言被设计成包容多种不同字长和数字编码的实现。虽然高端机器逐渐开始使用64位字长,但是目前大多数机器仍使用32位字长。大多数机器对整数使用二进制补码编码,而对浮点数使用IEEE编码。在位级上理解这些编码,并且理解算术运算的数学特性,对于编写能在全部数值范围上正确计算的程序来说,是很重要的。
C语言的标准规定在无符号和有符合整数之间进行强制类型转换时,基本的位模式不应该改变。在二进制补码机器上,对于一个w位的值,这种行为是由函数T2Uw和U2Tw来描述的。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浮点也能够表示特殊值无穷大8和NaN。
必须非常小心地使用浮点运算,因为浮点运算的范围和精度有限,而且浮点运算并不遵守普遍的算术属性,比如结合性。
分享到:
相关推荐
以上内容仅是深入理解计算机系统笔记的一部分,完整理解还需要深入学习计算机体系结构、编译原理、操作系统等领域的知识。通过这些理解,我们可以更好地设计、优化和调试程序,提升计算机系统的整体性能。
### 深入理解计算机系统的关键知识点 #### 计算机系统的组成与工作原理 《深入理解计算机系统》这本书旨在帮助读者从多个角度全面了解计算机系统的工作机制。它不仅仅局限于介绍计算机硬件的基本构成,还深入探讨...
### 深入理解计算机系统的笔记 #### 一、程序的基本组成 计算机程序的基本组成要素主要包括以下几个方面: 1. **算术和逻辑操作**:这些是程序中最基本的操作,用于处理数值计算和逻辑判断。 2. **存储访问**:...
《深入理解计算机系统》是计算机科学领域的一本经典著作,主要涵盖了计算机系统的基础知识和深入原理。这本书由Randal E. Bryant和David R. O'Hallaron合著,旨在帮助读者从硬件到软件,从底层到高层全面理解计算机...
《深入理解计算机系统》第三版是一本经典的计算机科学教材,旨在帮助读者全面了解计算机系统的运行机制。这本书结合了《计算机是怎样跑起来的》和《程序是怎样跑起来的》中的核心概念,通过综合讲解,使读者能够从...
这本书有多经典就不再赘述了。由于是图片书,所以有点大。不过效果还可以,上面有一些我个人的笔记,相信对阅读有些帮助。建议阅读3遍以上,多多益善。可以作为程序员终身发展的陪伴读物,良友啊。
《深入理解计算机系统》是Randal E.Bryant和David O’Hallaron合著的一本经典教材,本书全面探讨了计算机系统的运作原理。以下是对各章节核心知识点的详细阐述: **第一章 计算机系统漫游** 计算机系统的核心概念...
本书共分十三章,分别介绍了信息的表示和处理、程序的机器级表示、处理器体系结构、存储器层次结构、静态和动态链接、虚拟存储器、系统级I/O、网络编程和并发编程等精彩内容。其目的是解释计算机系统的所有本质...
《深入理解计算机系统》是计算机科学领域的一本经典著作,其第三版更是汇集了作者多年教学与实践经验的精华。这本书全面、深入地介绍了计算机系统的各个方面,帮助读者从硬件到软件,从底层到高层,建立起完整的...
本书共分十三章,分别介绍了信息的表示和处理、程序的机器级表示、处理器体系结构、存储器层次结构、静态和动态链接、虚拟存储器、系统级I/O、网络编程和并发编程等精彩内容。其目的是解释计算机系统的所有本质概念...
CSAPP自学笔记,深入理解计算机系统 本资源摘要信息将对计算机系统的各个组件进行详细的介绍,从中央处理单元(CPU)到浮点运算单元(FPU),从随机存取存储器(RAM)到基本输入输出系统(BIOS),从通用串行总线...
《深入理解计算机系统》是计算机科学领域的一本经典教材,主要涵盖了计算机硬件、软件以及它们之间的交互。第二章通常会涉及计算机系统的基础架构,包括处理器、内存系统、输入/输出设备以及程序执行的低级概念。...
《深入理解计算机系统》是计算机科学领域的一本经典教材,主要涵盖了计算机硬件、操作系统、编译器、存储系统以及网络等方面的知识。第一章通常会作为基础,介绍计算机系统的整体架构和基本概念,帮助读者建立起对...
总结来说,深入理解计算机系统的第一章主要涵盖了信息的位表示、文本和二进制文件的区别、程序的翻译过程、编译系统的作用以及处理器如何执行指令。这些基本概念构成了计算机科学的基础,对于学习和优化任何计算机...
本读书笔记整理了《深入理解Linux内核》的部分内容,旨在帮助新手理解Linux内核是如何通过硬件支持实现内存寻址和分页的。 首先,Linux的内存寻址使用逻辑地址,由两部分组成:段标识符(Segment Selector)和偏移...
这份复习笔记将深入探讨这个主题,帮助我们理解和掌握计算机系统的基础知识。 首先,计算机系统结构的基础概念包括:指令集架构(ISA)、体系结构、实现和微体系结构。ISA定义了处理器理解和执行的指令集,它是软件...
《深入理解计算机系统》是计算机科学领域的一本经典教材,主要涵盖了计算机系统的各个方面,包括处理器架构、内存系统、输入/输出、编译器、操作系统以及网络等核心主题。该书的第二版通常会包含更新的内容,以反映...