说明
- 博客作为笔记备份,不定时更新
- 参考内容为《计算机组成原理(第3版)》唐朔飞 高等教育出版社;王道考研《计算机组成原理考研复习指导2023》
- 文中的例题摘自王道考研《计算机组成原理考研复习指导2023》,大多是我个人认为较为典型的题目以及错题的部分整理
文章目录
数制与编码
1. 概述
计算机内信息采用二进制表示的原因
- 二进制只有两种状态,使用有两个稳定状态的物理器件就可以表示二进制数的每一位,制造成本低
- 二进制位1和0正好与逻辑值“真”和“假”对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利条件
- 二进制的编码和运算规则都很简单,通过逻辑门电路能方便的实现算术运算
进制转换
- 在计算机中,整数可以连续表示,小数是离散的,所以并不是每一个十进制小数都可以准确的用二进制表示,但任意一个二进制小数都可以用十进制小数表示
真值与机器数
- 带有“+”或“-”符号的数称为真值,真值是机器数所代表的实际值
- 把符号数据字化的数称为机器数,常用的有原码、补码、反码表示法
2. 定点数的编码表示
- 现代计算机通常用定点补码整数表示整数,用定点原码小数表示浮点数的尾数部分,用移码表示浮点数的阶码部分
机器数的定点表示
-
定点小数
- 定点小数是纯小数,约定小数点位置在符号位之后、有效数值部分最高位之前
-
定点整数
- 定点整数是纯整数,约定小数点位置在有效数值部分最低位之后
-
注:以下x均表示真值
原码
- 用机器数的最高位表示符号位,其余各位表示数的绝对值
- ★纯小数原码
[ x ] 原 = { x 1 > x ≥ 0 1 − x = 1 + ∣ x ∣ 0 ≥ x > − 1 [x]_{原} = \begin{cases} x & 1\gt x\ge0 \\ 1-x=1+|x| & 0\ge x \gt -1 \end{cases} [x]原={x1−x=1+∣x∣1>x≥00≥x>−1- 若字长为 n + 1 n+1 n+1,则原码小数的表示范围: − ( 1 − 2 − n ) ≤ x ≤ 1 − 2 − n -(1-2^{-n})\le x \le 1-2^{-n} −(1−2−n)≤x≤1−2−n(关于原点对称)
- 纯整数原码
[ x ] 原 = { 0 , x 2 n > x ≥ 0 2 n − x = 2 n + ∣ x ∣ 0 ≥ x > − 2 n [x]_{原}= \begin{cases} 0,x & 2^n\gt x\ge 0 \\ 2^n-x=2^n+|x|& 0\ge x\gt -2^n \end{cases} [x]原={0,x2n−x=2n+∣x∣2n>x≥00≥x>−2n- 若字长为 n + 1 n+1 n+1,则原码整数的表示范围: − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 -(2^n-1)\le x\le 2^n-1 −(2n−1)≤x≤2n−1(关于原点对称)
- 真值零的原码表示有正零和负零:即 [ + 0 ] 原 = 00000 和 [ − 0 ] 原 = 10000 [+0]_原=00000和[-0]_原=10000 [+0]原=00000和[−0]原=10000
- 原码表示的优点:与真值的对应关系简单、直观,与真值的转换简单,用原码实现乘除运算比较简便
- 缺点:0的表示不唯一,且原码加减法运算比较复杂
补码
- 纯小数补码
[ x ] 补 = { x 1 > x ≥ n 2 + x = 2 − ∣ x ∣ 0 > x ≥ − 1 m o d 2 [x]_补= \begin{cases} x& 1\gt x \ge n \\ 2+x=2-|x|& 0\gt x\ge -1 \end{cases} \ \ \ mod \ 2 [x]补={x2+x=2−∣x∣1>x≥n0>x≥−1 mod 2- 若字长为 n + 1 n+1 n+1,则补码的表示范围: − 1 ≤ x ≤ 1 − 2 − n -1\le x\le 1-2^{-n} −1≤x≤1−2−n(比原码多表示-1)
- ★纯整数补码
[ x ] 补 = { 0 , x 2 n > x ≥ 0 2 n + 1 + x = 2 n + 1 − ∣ x ∣ 0 ≥ x ≥ − 2 n m o d 2 n + 1 [x]_补= \begin{cases} 0,x& 2^n\gt x\ge 0\\ 2^{n+1}+x=2^{n+1}-|x|& 0\ge x\ge -2^n \end{cases} \ \ \ mod \ 2^{n+1} [x]补={0,x2n+1+x=2n+1−∣x∣2n>x≥00≥x≥−2n mod 2n+1- 若字长为 n + 1 n+1 n+1,则补码的表示范围: − 2 n ≤ x ≤ 2 n − 1 -2^n\le x\le 2^n-1 −2n≤x≤2n−1(比原码多表示 − 2 n -2^n −2n)
- 零的补码表示唯一,即 [ + 0 ] 补 = [ − 0 ] 补 = 0.0000 [+0]_{补}=[-0]_{补}=0.0000 [+0]补=[−0]补=0.0000
- 小数补码比原码多表示一个“-1”,整数补码比原码多表示一个“ − 2 n -2^n −2n”
- 变形补码
- 又称模4补码,双符号位的补码小数
[ x ] 补 = { x 1 > x ≥ 0 4 + x = 4 − ∣ x ∣ 0 > x ≥ − 1 m o d 4 [x]_{补}=\begin{cases} x& 1\gt x \ge 0\\ 4+x=4-|x|& 0\gt x\ge -1 \end{cases} \ \ \ mod \ 4 [x]补={x4+x=4−∣x∣1>x≥00>x≥−1 mod 4 - 模4补码双符号位00表示正,11表示负,用在完成算术运算的ALU部件中
- 将 [ x ] 补 [x]_{补} [x]补的符号位和数值位一起右移并保持原符号位的值不变,可实现除法功能
- 又称模4补码,双符号位的补码小数
- 补码与真值的转换
- 真值
→
转换
\stackrel{转换}{\rightarrow}
→转换补码
- 对于正数,和原码方式一样
- 对于负数,符号位取1,其余各位由真值“各位取反,末位加1”
- 补码
→
转换
\stackrel{转换}{\rightarrow}
→转换真值
- 对于正数(符号位为0),与原码方式一眼
- 对于负数(符号位为1),真值的符号为负,数值部分的各位由补码“各位取反,末位加1”
- 真值
→
转换
\stackrel{转换}{\rightarrow}
→转换补码
移码
- 移码常用来表示浮点数的阶码,它只能表示整数
- 移码就是在真值X上加上一个常数(偏置值),通常这个值取
2
n
2^n
2n,相当于X在数轴上向正方向偏移了若干单位
- [ x ] 移 = 2 n + x ( 2 n > x ≥ − 2 n , 机器字长为 n + 1 ) [x]_{移}=2^n+x(2^n\gt x \ge -2^n,机器字长为n+1) [x]移=2n+x(2n>x≥−2n,机器字长为n+1)
- 移码的特点
- 移码中零的表示唯一, [ + 0 ] 移 = 2 n + 0 = [ − 0 ] 移 = 2 n − 0 = 100 ⋅ ⋅ ⋅ 000 ( n 个 0 ) [+0]_{移}=2^n+0=[-0]_{移}=2^n-0=100···000(n个0) [+0]移=2n+0=[−0]移=2n−0=100⋅⋅⋅000(n个0)
- 一个真值的移码和补码仅相差一个符号位, [ x ] 补 [x]_{补} [x]补的符号位取反即得 [ x ] 移 [x]_{移} [x]移(1表示正,0表示负,这与其他机器数的符号位取值正好相反),反之亦然
- 移码全0时,对应真值的最小值 − 2 n -2^n −2n;移码全1时,对应真值的最大值 2 n − 1 2^n-1 2n−1
- 移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小
编码总结
比较内容 | 原码 | 补码 | 反码 | 移码 |
---|---|---|---|---|
对称 | 在数轴上对称 | 不对称 | 在数轴上对称 | 不对称 |
零的表示 | 不唯一,有+0和-0 | 唯一 | 不唯一,有+0和-0 | 唯一 |
3. 整数的表示
无符号整数的表示
- 默认数的符号为正
- 由于无符号数省略了一位符号位,因此在字长相同的情况下,它能表示的最大数比有符号整数能表示的大
- 比如,8位无符号整数的表示范围0~ 2 8 − 1 2^8-1 28−1,即最大数为255, 8位带符号整数的最大数为127
有符号整数的表示
- 计算机中带符号整数都用补码表示,n位带符号整数的表示范围是 − 2 n − 1 -2^{n-1} −2n−1~ 2 n − 1 − 1 2^{n-1}-1 2n−1−1
4. 例题
更新文档
更新日期 | 更新内容 |
---|---|