信息的表示和处理

小结

1. 信息储存
计算机将信息编码为位(比特),通常组织成字节序列.有不同的编码方式用来表示整数,实数和字符串不同的计算机模型在编码数字和多字节数据中的字节顺序时使用不同的约定。
信息的表示和处理_第1张图片
2.寻址和字节顺序
C语言的设计可以包容多种不同字长和数字编码的实现.64位字长的机器逐渐普及,并正在取代统治市场长达30多年的32位机器.由于64位机器也可以运行为32位机器编译的程序,我们的重点就放在区分32位和64位程序,而不是机器本身.64位程序的优势是可以突破32位程序具有的4GB地址限制.信息的表示和处理_第2张图片
3. 机器数的表示信息的表示和处理_第3张图片
大多数机器对整数使用补码编码,而对浮点数使用IEEE标准754编码。在位级上理解这些编码,并且理解算术运算的数学特性,对于想使编写的程序能在全部数值范围上正确运算的程序员来说,是很重要的。

4. 强制转换
在相同长度的无符号和有符号整数之间进行强制类型转换时,大多数C语言实现遵循的原则是底层的位模式不变。在补码机器上,对于一个w位的值,这种行为是由函数
T2U和U2T.来描述的。C语言隐式的强制类型转换会出现许多程序员无法预计的结果,常常导致程序错误。
5.溢出
整数运算和浮点运算会有不同的数学特性,是因为它们在处理数字表示有限性的方式不同 —— 整数的编码虽然只能编码一个相对较小的数值范围,但这种表示是精确的;而浮点数虽然可以编码一个较大的数值范围,其表示只是近似的。
由于编码的长度有限,与传统整数和实数运算相比,计算机运算具有非常不同的属性。当超出表示范围时,有限长度能够引起数值溢出。当浮点数非常接近于0.O,从而转换成零时,也会下溢。
CF与OF的判断:

1、CF的判断

①加法

十进制角度,如果两无符号数相加,结果大于2^n-1(n为位数),则CF=1,否则CF=0;

二进制角度,如果两无符号数相加,最高位向前有进位,则CF=1,否则CF=0。

②减法

十进制角度,如果两无符号数相减,减数大于被减数(也即结果不在0—2^n-1内),则CF=1,否则CF=0;

二进制角度,如果两无符号数相减,最高位向前游借位,则CF=1,否则CF=0。

2、OF的判断

①加法

十进制角度,如果两有符号数相加,结果不在-2(n-1)~2(n-1)-1内,则OF=1,否则OF=0;

二进制角度,如果两有符号数同号,而相加结果与之异号,则OF=1,否则OF=0。

②减法

十进制角度,如果有符号数相减结果在-2(n-1)~2(n-1)-1内,则OF=1,否则OF=0;

二进制角度,如果两个数异号,而相减结果与被减数符号相反,则OF=1,否则OF=0。

6. 整数运算
和大多数其他程序语言一样,C语言实现的有限整数运算和真实的整数运算相比,有一些特殊的属性。例如,由于溢出,表达式xx能够得出负数。但是,无符号数和补码的运算都满足整数运算的许多其他属性,包括结合律,交换律和分配律。这就允许编译器做很多的优化。例如,用(x<<3)-x取代表达式7x时,我们就利用了结合律,交换律和分配律的属性,还利用了移位和乘以2的幂之间的关系。
7. 位运算
我们已经看到了几种使用位级运算和算术运算组合的聪明方法。例如,使用补码运算,~x+1等价于-x.另外一个例子,假设我们想要一个形如[0,…,0,1,·,1]的位模株式,由wーk个0后面紧跟着k个1组成.这些位模式有助于掩码运算.这种模式能够通过C表达式(1< 8.浮点数表示
浮点表示通过将数字编码为x*2^y的形株式来近似地表示实数,最常见的浮点表示方式是由IEEE标准754定义的,它提供了几种不同的精度,最常见的是单精度(32位)和双精度(64位).IEEE浮点也能够表示特殊值正无穷,负无穷和NaN。
9.浮点数运算注意
必须非常小心地使用浮点运算,因为浮点运算只有有限的范围和精度,而且并不遵守普遍的算术属性,比如结合性。
10. 截断数字
假设我们不用额外的位来扩展一个数值,而是减少表示一个数字的位数.在一台典型32位机器上,当把int
X强制类型转换为short时,我们就将32位的int截断为16位的short
int.这个16位的位模式就是-12345的补码表示.当把它强制转换回int时,符号扩展把高16位设置为1,从而生成-12345的32位补码表示.

你可能感兴趣的:(计算机系统基础)