深入理解计算机系统阅读笔记-第二章

第二章 信息的表示和处理

现代计算机处理和存储使用二进制,有无符号,二进制补码和浮点数三种主要数字编码。

2.1 信息存储

大多数计算机用字节byte作为最小的可寻址的存储单位,程序将存储器视为一个byte数组,称为虚拟存储器(virtual memory),存储器的每一个字节都有唯一的地址来标识,所有地址的集合称为虚拟地址空间(virtual address space)。

2.1.1 十六进制表示法

十六进制的介绍和各种进制之间的转换联系

2.1.2 字长

计算机的字长决定了整数和指针的取值范围,32位机,虚拟地址范围是4G

2.1.3 数据大小

计算机和编译器使用不同的方式来编码数字,不同数据类型的字节长度不一样。程序员应该尽量保证开发的程序在不同的机器和编译器上可移植,其中重要的一项就是程序对不同的数据类型的确切大小不敏感。

2.14 寻址和字节顺序

大端

小端

可能会引起的问题:
1. 大端机器的数据送到小端处理。
2. 阅读机器级程序时。小端程序不符合人类阅读习惯。
3. 通过强制类型转换访问不同类型对象的字节表示。

2.1.5 表示字符串

c中字符串以null结尾,使用ASCII作为字符码任何系统都会得到相同的结果,即文本数据比二进制数据有更强的平台独立性。

2.1.6 表示代码

相同的c程序在不同的机器上的机器码是不同的,二进制代码很少可以在不同的机器和操作系统上移植。

2.1.7 布尔代数和环

说了一堆数学概念,实际就是介绍与或非逻辑运算。

2.1.8 C中的位级运算

位级别的& | ~ ^

2.1.9 C中的逻辑运算

&& || !

2.1.10 C中的移位运算

<<

>> 逻辑右移:左端补0;算术右移:左端补n个最高有效位,一般有符号数使用算数右移

2.2 整数表示

2.2.1 整型数据类型

2.2.2 无符号和二进制补码编码

有符号整数通过二进制补码的形式表示。即按位取反加1。例如-1的8位16进制表示为0xFF,即1按位取反得到0xFE,加1得到0xFF。反过来也成立,0xFF按位取反得到0x0,加1得到1,加上负号就是-1。

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

以8为位宽为例,-1的int型编码为0xFF,经过强制类型转换后,不会改变其编码形式,只会使用新的类型重新表示,所以得到的值是正的0xFF。即+255.

int x = -1;
unsigned int ux = (unisgned) x;

2.2.4 C中的有符号与无符号数

当c运算表达式中存在任一无符号数的时候,其他有符号数都会被强制转换成无符号,所以会有一些异常结果,下面例子中异常的通过加*号标识。

2.2.5 扩展一个数字的位表示

无符号数据扩展,直接在高位补0

有符号数据扩展,在高位全部补1,这样才能保证按位取反加1的值转换正确。

2.2.6 截断数字

当一个有符号数字被截断时,值的变化是不可控的。实际使用的也比较少。

2.2.7 关于有符号数和无符号数的建议

Java只支持有符号整数,但C中的有符号数在某些场景也很有用。

2.3 整数运算

2.3.1 无符号加法

两个无符号整数相加的值大于无符号整数最大值时,会发生溢出,丢弃越界最高位数据,得到异常的结果。

2.3.2 二进制补码加法

负数运算也会有溢出,称为负溢出。

2.3.3 二进制补码的非

2.3.4 无符号乘法

2.3.5 二进制补码乘法

2.3.6 乘以2的幂

乘法运算效率低,编译器通过移位和加法的组合来实现乘法

2.3.7 除以2的幂

同上

2.4 浮点

2.4.1 二进制小数

整型->浮点型的方法,是把小数部分转换成2的n次方分之几,然后对应的n位填数据。

2.4.2 IEEE浮点表示 

s:符号(sign),s=0代表正数,s=1代表负数;数值0需要特殊处理;
M:有效数(significand),是一个二进制小数;
E:指数(exponent),是2的幂,可能是负数,作用是对浮点数加权。

2.4.3 数值示例

2.4.4 舍入

偶数舍入法,1.5和2.5都舍入为2

2.4.5 浮点运算

2.4.6 C语言中的浮点

C语言提供了float和double两种浮点数据类型。

2.5 小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值