《深入理解计算机系统》阅读笔记之第二章 信息的表示和处理
1 概述
1.现代计算机存储和处理的信息以二值信号表示。
2.无符号(unsigned)编码基于传统的二进制表示法表示大于或者等于零的数字。
3.补码( two’ s-complement)编码是表示有符号整数的最常见的方式,有符号整数就是可以为正或者为负的数字。
4.浮点数(floatingpoint)编码是表示实数的科学记数法的以2为基数的版本。
5.计算机的表示法是用有限数量的位来对一个数字编码,因此,当结果太大以至不能表示时,某些运算就会溢出(overflow)。
6.
2 信息存储
1.大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位
2.机器级程序将内存视为一个非常大的字节数组,称为虚拟内存,内存的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能地址的集合就称为虚拟地址空间(virtualaddressspace)
3.指针是C语言的一个重要特性。它提供了引用数据结构(包括数组)的元素的机制。与变量类似,指针也有两个方面:值和类型。它的值表示某个对象的位置,而它的类型表示那个位置上所存储对象的类型(比如整数或者浮点数)。
2.1 十六进制表示法
1.在C语言中,以0x或0X开头的数字常量被认为是十六进制的值。字符A-F可以大小写混用
2.2 字数据大小
1.每台计算机都有一个字长(wordsize),指明指针数据的标称大小(nominalsize)。
2.因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为w位的机器而言,虚拟地址的范围为0~2"-1,程序最多访问2“个字节。
3. 32位字长限制虚拟地址空间为4千兆字节(写作4GB),也就是说,刚刚超过4X10的9次方字节。扩展到64位字长使得虚拟地址空间为16EB,大约是1. 84X10的19次方字节。大多数64位机器也可以运行为32位机器编译的程序,这是一种向后兼容。
2.3 寻址和字节顺序
1.排列表示一个对象的字节有两个通用的规则。考虑一个w位的整数,其位表示为[xw-1,xw-2,.,x1,xo],其中xw-1是最高有效位,而xo是最低有效位。假设w是8的倍数,这些位就能被分组成为字节,其中最高有效字节包含位[xw-1,xw-2,.,xw-8], 而最低有效字节包含位[xn,x6,.,xo],其他字节包含中间的位。某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储对象,而另–些机器则按照从最高有效字节到最低有效字节的顺序存储。前一种规则最低有效字节在最前面的方式,称为小端法(little endian)。后一种规则一最高有 效字节在最前面的方式,称为大端法(big endian)。
2.大多数Intel 兼容机都只用小端模式。另一方面,IBM和Oracle(从其2010年收购Sun Microsystems开始)的大多数机器则是按大端模式操作。
3.对于大多数应用程序员来说,其机器所使用的字节顺序是完全不可见的。
2.4 表示字符串
1.C语言中字符串被编码为一个以null(其值为0)字符结尾的字符数组。每个字符都由某个标准编码来表示,最常见的是ASCII字符码。
2.计算机系统的一个基本概念就是,从机器的角度来看,程序仅仅只是字节序列。
2.5 布尔代数
2.6 C语言中的位级运算
2.7 C语言中的逻辑运算
2.8 C语言中的移位运算
3 整数表示
3.1 整型数据类型
3.2 无符号数的编码
备注:其实我觉得《编码》这本书对这方面的解释更好理解
3.3 补码编码
3.4 有符号数和无符号数之间的转换
4 小结
这一章的内容没有细看,但是感觉不如《编码》这本书写的更加让人容易理解。