计算机系统基础复习提纲 - 第一部分

  • Overview
  • Bits, Bytes and Integers – Part 1
  • Bits, Bytes and Integers – Part 2
  • Floating Point

Overview

Bits, Bytes and Integers – Part 1

每台计算机都有一个字长,指明指针数据的标称大小。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为\(w\)位的机器而言,虚拟地址的范围为\(0\sim 2^w-1\)程序最多访问\(2^w\)个字节。

最低有效字节在最前面的方式称为小端法。最高有效字节在最前面的方式称为大端法。

Linux 和 Windows 是小端法,Sun 是大端法。小端法读字节编码时,要把顺序反过来。

字符串在使用 ASCII 码作为字符码的任何系统上都将得到相同的结果。

逻辑右移在左端补\(k\)\(0\),得到的结果是\([0,\dots,0,x_{w-1},x_{w-2},\dots,x_k]\)。算术右移是在左端补\(k\)个最高有效位的值,得到的结果是\([x_{w-1},\dots,x_{w-1},x_{w-1},x_{w-2},\dots,x_k]\)

有符号数使用算术右移,无符号数使用逻辑右移。

同样字长的有符号数和无符号数之间相互转换:数值可能会改变,但是位模式不变。

执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么 C 语言会隐式地将有符号参数强制类型转换为无符号数并假设这两个数都是非负的,来执行这个运算。

上图中应为“宽度为\(\omega'\)的位向量\(\vec x'\)”。

当把 short 转换成 unsigned 时,我们先要改变大小,之后再完成从有符号到无符号的转换。

练习题:2.17 2.18 2.19 2.21 2.23 2.24

Bits, Bytes and Integers – Part 2

对于补码,-x~x+1等价

计算\(x\times K\)编译器会将 K 的二进制表示表达为一组 0 和 1 交替的序列:

\[[(0\dots 0)(1\dots 1)(0\dots 0)\dots (1\dots 1)]\]

考虑一组从位位置\(n\)到位位置\(m\)的连续的\(1(n\geq m)\)。我们可以用下面两种不同形式中的一种来计算这些位对乘积的影响:

形式 A:(x<<n)+(x<<(n-1))+...+(x<<m)​

形式 B:(x<<(n+1))-(x<<m)​

注意移位运算比四则运算的优先级低。

上图中产生数值应该为\(\lceil x/2^k\rceil\)

\(k\)位左边的位可能会加 1,也可能不会加 1。对于不需要舍入的情况(k=1),加上偏量只影响那些被移掉的位。对于需要舍入的情况,加上偏量导致较高的位加 1,所以结果会向零舍入。

表达式(x<0 ? x+(1<<k)-1 : x) >> k计算\(x/2^k\)

这一章中判断表达式真假的时候一定要考虑\(TMin\)和 0,两个式子取逻辑或时直接假设前一个式子为假看后面的式子成不成立。

练习题: 2.30 2.33 2.40 2.44 2.60 2.65 2.67 2.68

Floating Point

二进制小数:

把分数转化成二进制小数的过程中,如果分母是 2 的整数次幂,可以先把分子转化成二进制,然后移动小数点。

单精度 8 个 exp 位,双精度 11 个 exp 位。

  1. 规格化的值:\(exp\)不全为 0 也不全为 1;\(E=exp-Bias\),其中\(Bias=2^{k-1}-1\),在单精度下是\(127\),双精度下是\(1023\)\(M=1+frac\);构造时调整\(E\)使得\(1\leq M < 2\)
  2. 非规格化的值:\(exp\)全为 0;\(E=1-Bias\)\(M=frac\),表示\(0\)和接近\(0\)的数。
  3. 特殊值:\(exp\)全为 1;\(frac=0\)时表示无穷大,\(frac\not=0\)时表示 NaN
  • 从 int 转换成 float,数字不会溢出,但是可能被舍入
  • 从 int 或 float 转换成 double,因为 double 有更大的范围,也有更高的精度,所以能够保留精确的数值。
  • 从 double 转换成 float,因为范围要小ー些,所以值可能溢出成\(+\infty\)\(-\infty\)。另外,由于精确度较小,它还可能被舍入。
  • 从 float 或者 double 转换成 int,值将会向零舍入。进一步来说,值可能会溢出。C 语言标准没有对这种情况指定固定的结果。与 Intel 兼容的微处理器指定位模式\([10…00]\)(字长为\(w\)时的\(TMin_w\))为整数不确定值。一个从浮点数到整数的转换,如果不能为该浮点数找到一个合理的整数近似值,就会产生这样一个值。

练习题:2.45 2.47 2.54

作者

xqmmcqs

发布于

2020-11-08

更新于

2023-03-29

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×