0%

计组chp2-数据表示

参考的书《计算机组成与体系结构》第4版(黑皮书)(The Essentials of Computer Organization and Architecture)。注:目前仅记录考试需要用到的部分。

2.2按位计数系统

Positional Numbering Systems

base-2系统:以2为基数,按位存储数字表示2的幂次。

基数base:某个数能以基数的幂次方相加来表示。base==radix

2.3进制之间的转换

radix conversation/converting between bases

decimal-10,ternary-3,hexadecimal-16

无符号整数的转换

  • 减法subtraction-先得到高位image-20220422233851329
  • 除法余数division remainder-先得到低位image-20220422233926765

小数的转换

小数decimal不一定在所有进制下都有精确的表示。

小数点右边表示基数的负幂次negative powers of the radix

  • 减法(减负次幂)-先得到高位(更靠近小数点)image-20220422234932322
  • 乘法multiplication-也是先得到高位(只能是高位,如果能得到地位那一定有精确表示?)image-20220422235200581

2的幂次作为基数的计数系统之间的转化

二进制八进制十六进制之间的转换:一位8进制数可直接写为3位2进制;一位16进制数可直接写为4位2进制。如果位数不够(3/4)左侧补零

八进制适用于使用6位字的系统

2.4有符号整数表示

unsigned/signed numbers有/无符号数

signed magnitude符号幅度(我觉得是原码

原码

最高位表示符号sign:0正1负;其余位表示数值。

补码

complement system补码系统,one’s complement一位补码即反码,two’s complement补码

以r为底 的d位非零数N的基数补码是r^d – N。简单来算:正数的补码就是原码;负数的补码是原码按位取反(得到反码),然后末端加1得到补码。通过加负数的补码实现二进制减法

移码

Excess-M/offset binary移码:以无符号值表示有符号值。

通常选择的偏差bias:$M=2^{n-1}-1$。

计算excess-M:十进制+M再转为二进制(此时的的二进制)

示例image-20220424170148945

进位和溢出

overflow

检测补码系统中溢出的规则:如果符号位的’carry in’=’carry out’就没有发生溢出;不等就是溢出了。carry in就是从数值位进到符号位,carry out就是符号位上产生的进位。

image-20220424171159260

如图:carry in==carry out==1

进位与溢出是相互独立的

booth算法

  • 10(乘数的当前+右侧):乘积-被乘数(上面的那个)
  • 01:乘积+被乘数
  • 00/11:左移一位,乘积+0
  • 假设乘数位的起始位(最右侧)为0
image-20220424172207836

注意事项:

  • 补码扩展:补高位,正数补0,负数补1
image-20220424172726511

算术移位

算术移位arithmetic shift

算术左移=最右边插入0=乘2,算数右移=最左边插入0=除2.

2.5浮点数表示

floating-point浮点数,在计算机中由三个固定大小的字段组成:符号+指数(决定了可以表示的值的范围)+有效数字(一般是小数点后的,for精度)

sign exponent significand

典例-14位浮点模型simple model:len(floating-point)=14(len(exponen)=5, len(significand)=8)

eg.$32=2^5=1.02^5=0.12^6$,在14位浮点模型中表示为:(注意有效数字是小数部分,右侧补零)image-20220424174500886

同义问题synonymous forms:由于$0.12^6=0.012^7=……$,规定有效数字的第一位必须是1(归一化);

提供负指数negative exponents:使用有偏指数biased exponent,bias=$2^{5-1}-1$=15,即excess-15

  • IEEE浮点数标准规定小数点左侧必须为1.
  • 避免测试浮点值是否等于0,因为0有符号位,正零不等于负零。

浮点运算

以14位浮点模型为例

加减法

将指数化为相等,使小数点对齐?然后有效数字段是正常的二进制加法,如有进位,则调整指数。

eg.$12_{10}=0.11002^4,1.25_{10}=0.0001012^4$,excess-15,可得:指数=4+15=19=10011,计算过程如下:image-20220424193422650

乘除

不需要将指数调至相等。有效数字跟正常的二进制乘法一样,计算结束后调整指数。

浮点误差

eg.$128.5_10=10000000.1_2=0.100000001*10^8$,若使用14位浮点模型则不能准确表示,因为有效数字只有8位,而128.5有9位,低位会丢失(变成128)。此时的相对误差为:
$$
\frac{128.5-128}{128.5}≈0.39%
$$

  • 由于位会被截断,不一定满足交换律和分配率

上溢下溢

  • 浮点上溢overflow和下溢underflow会导致程序崩溃

  • 当没有空间存储计算产生的高位时,就会发生上溢

  • 当值太小而无法存储时会发生下溢,可能导致除

    以零

精度与准确性

精度precision,准确性accuracy,一般是正相关(不一定!)

2.7错误检测与纠错

error detection and correction

循环冗余校验

CRC:cycling redundancy checking

systematic error detection系统错误检测

CRC是模2算数域上的多项式

模2除法

modulo 2 division

除法过程中:模2减=模2加=按位异或,下例计算商和余数:image-20220424200503670

把要传输的数据的二进制格式想成域上多项式。

检测过程

  1. 假设传输的数据的二进制串为m1;
  2. 接收方和发送方商定一个k(key);
  3. m1左移(len(key)-1)位后得到m2;
  4. 模2除法)m2/key得到余数r1(remainder);
  5. 发送消息m3=m2+r1;
  6. 接收方收到m3,r2=m3/k,若r2=0则没有位丢失或损坏。

汉明码

Hamming codes

里德-所罗门码

Reed-Solomon codes

作业

1.十进制转其他进制

除法取余,先得到的是低位

5.其他进制转十进制

r进制数$a_na_{n-1}…a_1a_0$转十进制:

res=$a_n×r^n+a_{n-1}×r^{r-1}×…a_1×r+a_0$

7.十进制小数转二进制

整数与小数分开计算

小数部分乘2取整法,先得到离小数点近的

由于不一定能精确表示(不一定能最后乘得结果为1),需要注意题目要求保留几位小数

13.16进制转二进制

一位16进制数=4位二进制数,高位补零

17.原码反码补码移码

原码就是表示有符号数吧?注意题目中有要求用几位有符号数表示

0正1负!!!!

有符号数的反码,符号位不变!!!

移码Excess-M中的$M=2^{n-1}-1$

43.booth算法?

关于自己凑出来答案却看不懂这件事image-20220427130026863

为啥要先转为八位?难道先用十进制小算一下结果?

  • 10减,01加(看下面的乘数,加减上面的被乘数)
  • 补码扩展时补符号位!
  • 乘积结果也是补码

50.浮点数

符号位+指数位5(使用移码吗)+有效数字8

小数点对齐计算,若有效位数多了直接丢弃

78.CRC

image-20220427132527128

  1. 被除数(message)左移len(k)-1位得到m2
  2. 模2除法得到余数r
  3. m2+r,发送
  4. 接收方检验:看余数是否为0