信息的表示和处理
本章主要描述计算机内的数字存储及运算方式。
独立的、单个的位通常是不怎么有用的,但计算机通过把位组合在一起,再加上某种解释,即赋予不同的可能的位模式以含义,就可以表示任何有限集合的元素。比如对文档中的子母和符号进行编码。
信息存储
字节是内存的最小可寻址单位,内存被视为一个非常大的字节数组,称为虚拟内存
,内存的每一个字节由唯一的一个数字标识,称为地址,所有可能的地址的集合称为虚拟地址空间
。
十六进制标识法
一个字节由八位组成,这里的位都是指二进制位
,人们发现用‘0’,‘1’串标识数据太过冗长,通常用十六进制标识计算机中的位模式。十六进制和二进制之间的转换非常简单,每四位二进制位对应一个十六进制数,不足四位的高位补零。约定以0x
开头的数字为十六进制的值。
寻址和字节顺序
小端法
。 最低有效字节在最前面。大端法
。 最高有效字节在最前面。
大多数Intel兼容机器只用小端模式,IBM和Oracle的大多数机器采用大多数模式。许多新的微处理器采用双端法
,移动端的Android和IOS只能运行于小端模式。
C语言中的移位操作
左移
。低位补零。算数右移
。高位补之前的最高位的值。逻辑右移
。高位补零。
整数表示
无符号数编码
对于w位的二进制向量(Xw-1,Xw-2,······,X0),其每一位的权重为2^w-1,因此这个向量的十进制值为Xw-12^w-1+Xw-22^w-2+···+X0*1。
补码编码
相较于无符号编码,除最高位权重为负,别的一样。
无符号数编码和补码编码都是具有唯一性
有符号数和无符号数转换
只需要记住一个原则,转换中位模式不变。
扩展一个数字的位表示
无符号数零扩展
。在高位之前添加零。补码数的符号扩展
。在高位添加符号位的值。
小类型像大类型转变,先改变大小(扩展),再转换类型。
问题
一
/* WARNING: This is buggy code */
float sun_elements(float aH, unSigned length){
int i;
float result = O;
for (i = O; i <= length - 1; i++)
result += a[i];
return result;
}