系统中信息的表示和处理 --《深入理解计算机系统》第二章读书笔记
1.信息存储
- 系统将8位的块作为最小的可寻址存储器单位,机器级程序系统看成一个大的数组,然后通过地址来获得存储器中的这些块的内容。
- 数据在计算机中的存储都是用二进制,不过二进制不易表示,一般我们用十六进制来表示。如八位的十六进制范围为00~FF。
- 计算机的字长代表其整数数据的大小,同时也是系统絮凝地址空间最大大小。
- C语言中对布尔代数的操作有提供几种方式,比如&(与),|(或),~(取反),^(异或)。
2.整数表示
- 无符号数的编码,无符号数与有符号数的区别在于无符号数的最高位作为数值而不是符号表示。
- 无符号数函数:
,w表示为位数,(B2U的意思是Binary to Unsigned)
- 有关有符号数的表示有三种,分别是原码,补码,反码,计算机存储和计算一般用的就是补码。
- 补码编码函数:
,w为位数
- 无符号数32位最大和有符号数32位最大最小值
16进制 | 10进制 | |
Umax(32位) | 0xFFFFFFFF | 4294967295 |
Tmax(32位) | 0x7FFFFFFF | 2147483647 |
Tmin(32位) | 0x80000000 |
-2147483648 |
3.有符号数和无符号数转换
- 对大多数C语言而言,处理同样字长的有符号数和无符号数之间相互转换规则是:数值可能改变,但是位模式不变。
- 有符号是向无符号数转换:
- 在C语言中,当在执行一个运算中有一个运算数是有符号的而另一个是无符号数的话,C语言会强制将有符号数转换成无符号数参与运算,并假设两个数都是非负的。
4.整数运算
- 无符号加法:
,当运算溢出时(超过w位所能表示的最大值)就会截断,即将溢出位移除。
- 补码加法:
,同无符号加法一样,若运算结果溢出(有符号位分正溢出和负溢出),即将溢出值移除。
- 补码乘法:
,C语言中处理补码乘法运算结果是将2w位的乘积截断为w位(高位截断)。
5.浮点数的表示
- 现代计算机中的浮点数表示基本采用IEEE浮点标准,以32位为例,s表示符号位,8位的exponent表示阶码,剩下的23位为尾数