《深入理解计算机系统》第二章学习笔记

信息的表示和处理

本章主要描述计算机内的数字存储及运算方式。

独立的、单个的位通常是不怎么有用的,但计算机通过把位组合在一起,再加上某种解释,即赋予不同的可能的位模式以含义,就可以表示任何有限集合的元素。比如对文档中的子母和符号进行编码。

信息存储

字节是内存的最小可寻址单位,内存被视为一个非常大的字节数组,称为虚拟内存,内存的每一个字节由唯一的一个数字标识,称为地址,所有可能的地址的集合称为虚拟地址空间

十六进制标识法

一个字节由八位组成,这里的位都是指二进制位,人们发现用‘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;
}

猜你喜欢

转载自www.cnblogs.com/thechosenone95/p/9906502.html