计算机组成原理——现代计算机的数制、编码和计算
创始人
2025-05-28 18:37:59
0

文章目录

  • 数制
    • 进位计数法
    • 不同进制数之间的相互转换
      • 二进制数转换为八进制数和十六进制数
      • 任意进制数转换为十进制数
      • 十进制数转换为任意进制数
  • 编码
    • 真值和机器数
    • 机器数的定点表示法
      • 定点小数和定点整数
      • 原码表示法
      • 补码表示法
      • 反码表示法
      • 移码表示法
      • 原码、反码、补码和移码的相互转换
    • 机器数的浮点表示法
      • 格式和范围
      • IEEE754
    • 现代计算机的编码
  • 运算
    • 定点数的运算
      • 加法运算
      • 减法运算
      • 移位运算
    • 浮点数的运算
  • 数据的存储和排列
    • 大小端模式
    • 边界对齐

数制

进位计数法

在进位计数法中(以十进制为例),每个数位所用到的数码(0-9)的个数称为基数(10),每个数位记满基数后就向高位进位。

在这里插入图片描述

每个数码所表示的数值等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为位权

在这里插入图片描述

一个进位数的数值大小就是它的各位数码按权相加:
9527=9×103+5×102+2×101+7×1009527=9\times 10^3+5\times10^2+2\times10^1+7\times10^09527=9×103+5×102+2×101+7×100

在计算机系统内部,所有信息都使用二进制进行编码,这样做的原因如下:

  • 二进制只有两种状态,使用具有两个稳定状态的物理器件就可以表示二进制数的每一位。
  • 二进制的两种状态正好与逻辑值的真和假对应。
  • 二进制的编码和运算规则比较简单,使用逻辑门电路就可以实现。

952710=1001010011011129527_{10}=10 0101 0011 0111_{2}952710​=100101001101112​

通常会使用八进制和十六进制方便的表示二进制数:
952710=100101001101112=224678=2537169527_{10}=10 0101 0011 0111_{2}=22467_{8}=2537_{16}952710​=100101001101112​=224678​=253716​

不同进制数之间的相互转换

二进制数转换为八进制数和十六进制数

对于一个二进制混合数(既包含整数部分又包含小数部分),在转换时应以小数点为界,整数部分,从小数点开始往左数,将一串二进制分为3位(八进制)一组或四位(十六进制)一组,在数的最左边可根据需要加0补齐;小数部分,从小数点开始往右数,也将一串二进制分为3位(八进制)一组或四位(十六进制)一组,在数的最右边可根据需要加0补齐,最终使总的位数为3或4的整数倍,然后分别用对应的八进制数或十六进制数取代。
100101001101112⇓0010010100110111⇓25371610 0101 00110111_{2}\\\Downarrow\\0010\quad0101\quad0011\quad0111\\\Downarrow\\2537_{16}100101001101112​⇓0010010100110111⇓253716​

任意进制数转换为十进制数

将任意进制数的各位数码和它们的权值相乘,再把乘积相加,就得到了一个十进制数,这种方法称为按权展开相加法
253716⇓2×163+5×162×3×161+7×160⇓9527102537_{16}\\\Downarrow\\2\times16^3+5\times16^2\times3\times16^1+7\times16^0\\\Downarrow\\9527_{10}253716​⇓2×163+5×162×3×161+7×160⇓952710​

十进制数转换为任意进制数

对十进制数的整数部分采用除基取余法:整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位,商为0时结束;对十进制的小数部分采用乘基取整法,小数部分乘基取整,最先取得的整数为数的最高位,最后取得的整数为数的最低为,乘积为1(或满足精度,因为在计算机中,整数可以连续表示,而小数是离散的)时结束。

编码

真值和机器数

日常生活中,通常使用正负号表示正数和负数,这种带正负符号的数就称为真值。在计算机中,通常将数的符号和数值部分一起编码,将数值的符号数字化,用0表示正号,1表示负号。这种将符号数字化的数称为机器数,机器数所表示的实际值就是真值。在计算机中,根据小数点的位置是否固定将机器数分为定点数和浮点数,并且常使用原码、补码、反码和移码表示法来表示机器数。

机器数的定点表示法

定点小数和定点整数

定点表示法用于表示定点小数和定线整数。

  • 定点小数:定点小数是纯小数,约定约定小数点位置在符号位之后、有效数值部分最高位之前。

在这里插入图片描述

  • 定点整数:定点整数是纯整数,约定小数点位置在有效数值部分最低位之后。

在这里插入图片描述

原码表示法

原码表示法:用机器数的最高位表示数的符号,其余各位表示数的绝对值

  • 纯小数的原码定义如下(注:下文在不说明的情况下均以字长为4示例):
    [x]原={x,0≤x<11+∣x∣,−1x,  0≤x<11+∣x∣,  −1
  • 纯整数的原码定义如下:
    [x]原={x,0≤x≤23−123+∣x∣,−(23−1)≤x≤0[x]_原=\begin{cases}x,\ \ 0≤x\leq2^3-1\\2^3+|x|,\ \ -(2^3-1)\leq x≤0\end{cases}[x]原​={x,  0≤x≤23−123+∣x∣,  −(23−1)≤x≤0​

在这里插入图片描述

原码表示法的优点是与真值的相互转换简单;缺点是0的表示不唯一并且符号位不能参与运算。

补码表示法

在介绍补码之前,先了解几个概念和性质:

  • 模:模是指一个计量系统的计数范围,本质上是计量系统产生溢出的值,这个值在计量系统中表示不出来,计量系统上只能表示出模的余数。并且,模是不分符号的,不存在有符合和无符号情况下之说。
  • 取模:两个整数a,ba,ba,b,把计算a−b⌊a÷b⌋a-b\lfloor a\div b\rfloora−b⌊a÷b⌋的过程称为模运算,记作amodba\ \ mod \ \ ba  mod  b。
  • 同余:两个整数a,ba,ba,b,若amodm=bmodma\ \ mod\ \ m=b\ \ mod\ \ ma  mod  m=b  mod  m,则称aaa与bbb对于模mmm同余。记作a≡b(modm)a\equiv b(mod\ \ m)a≡b(mod  m)。
  • a≡a(modm)a ≡ a (mod\ \ m)a≡a(mod  m)。
  • 若a≡b(modm),c≡d(modm)a ≡ b (mod\ \ m),c ≡ d (mod \ \ m)a≡b(mod  m),c≡d(mod  m),那么 a+c≡b+d(modm)a×c≡b×d(modm)a + c ≡ b + d (mod\ \ m)\\a \times c ≡ b \times d (mod\ \ m)a+c≡b+d(mod  m)a×c≡b×d(mod  m)

在一个具有模的计量系统中,只需要找到负数的一个正数同余数,就可以将所有减法运算转换为加法运算。在计算机中,由于计算机的字长是固定的,所以可以将计算机看作一个模为242^424的计量系统。那么就可以使用同余数进行编码,这就编码方式就称为补码表示法。补码中符号位即代表了数的正确符号,又表示同余数中的一个数位,因此在补码运算中,符号位可以与数值位一起参加运算。纯小数的补码定义如下:

[x]补={x,0≤x<12+x,−1≤x≤0(mod2)[x]_补=\begin{cases}x,\ \ 0≤x<1\\2+x,\ \ -1≤x≤0\end{cases}(mod\ \ 2)[x]补​={x,  0≤x<12+x,  −1≤x≤0​(mod  2)

纯整数的补码定义如下:

[x]补={x,0≤x≤23−124+x,−23≤x≤0(mod24)[x]_补=\begin{cases}x,\ \ 0≤x\leq2^3-1\\2^4+x,\ \ -2^3≤x≤0\end{cases}(mod\ \ 2^4)[x]补​={x,  0≤x≤23−124+x,  −23≤x≤0​(mod  24)

在这里插入图片描述

相较于原码表示法,补码表示法0的表示唯一、加减运算统一采用加法操作实现并且负数的表示范围增加。

反码表示法

反码表示法:正数的反码还是等于原码;负数的反码就是它的原码除符号位外,按位取反。通常使用来由原码求补码或者由补码求原码的过渡码。

  • 纯小数的反码定义如下:
    [x]反={x,0≤x<12−23,−1x,  0≤x<12−23,  −1
  • 纯整数的反码定义如下:
    [x]反={x,0≤x≤23−124−1+x,−(23−1)≤x≤0[x]_反=\begin{cases}x,\ \ 0≤x\leq2^3-1\\2^4-1+x,\ \ -(2^3-1)\leq x≤0\end{cases}[x]反​={x,  0≤x≤23−124−1+x,  −(23−1)≤x≤0​

在这里插入图片描述

移码表示法

移码表示法:在真值上加上一个常数(偏置值),通常这个常数为232^323,相当于xxx在数轴上向正方向移动了若干个单位。通常使用移码表示浮点数的阶码,它只能表示整数。
[x]移=23+x,−(23−1)≤x≤23−1[x]_移=2^3+x,\ \ -(2^3-1)\leq x\leq2^3-1[x]移​=23+x,  −(23−1)≤x≤23−1

原码、反码、补码和移码的相互转换

在这里插入图片描述

机器数的浮点表示法

浮点数表示法是指以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。这样,在数位有限的情况下,既扩大了数的表示范围,又保持了数的有效精度。

格式和范围

浮点数的格式表示为:
N=(−1)S×M×REN=(-1)^S\times M\times R^EN=(−1)S×M×RE

其中:

  • S取值0或1,用来表示浮点数的符号。
  • M是一个二进制定点小数,称为尾数,一般用定点原码小数表示。M的位数反应浮点数的精度。
  • E是一个二进制定点整数,称为阶码或指数,用移码表示。E的值反应浮点数的小数点的位置,阶码的位数反应浮点数的表示范围。
  • R是基数,可以约数为2、4、16等。

在这里插入图片描述

浮点数的范围是关于原点对称的:

在这里插入图片描述

上溢:

  • 运算结果大于最大正数时称为正上溢。
  • 运算结果小于最小负数时称为负上溢。

下溢:

  • 运算结果在0和最小正数之间称为正下溢。
  • 运算结果在最大负数和0之间称为负下溢。

数据产生上溢,计算机必须中断运算操作,进行溢出处理;数据产生下溢,浮点数值趋于0,计算机将其当作机器数0处理。

IEEE754

现代计算机的编码

现代计算机使用不同的编码表示不同性质的数:

  • 整数的表示:
    • 无符号整数:无符号整数的默认符号为正,因此可以看作采用省略符号位的原码表示法表示。
    • 有符号整数:反码表示法表示。
  • 小数的表示:浮点表示法。

运算

定点数的运算

加法运算

原码:

  • 符号位相同,则绝对值相加,结果符号位不变;
  • 符号位不同,则做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同。

补码:

  • 按照二进制运算规则,逢二进一。
  • 符号位参与运算,两数直接相加,结果的符号位也在运算中得出。
  • 溢出位丢弃,最终结果也为补码。

减法运算

原码:

  • 首先将减数符号取反,然后将被减数和符号位取反后的减数按原码加法进行计算。

补码:

  • 将被减数与减数的机器负数的补码相加。
    在这里插入图片描述

  • 按照二进制运算规则,逢二进一。

  • 符号位参与运算,两数直接相加,结果的符号位也在运算中得出。

  • 溢出位丢弃,最终结果也为补码。

移位运算

移位运算具体包括以下几种运算:

  • 算术移位:算数移位是指通过改变各个数码位和小数点的位置,从而改变各数码位的位权,通过算数移位可以实现乘法和除法。
    • 原码:

      • 正数和负数相同。
      • 符号位保持不变,仅对数值位进行移位。
      • 左移:低位补0,高位舍弃。
      • 右移:高位补0,低位舍弃。
    • 反码:

      • 正数:
        • 符号位保持不变,仅对数值位进行移位。
        • 左移:低位补0,高位舍弃。
        • 右移:高位补0,低位舍弃。
      • 负数:
        • 符号位保持不变,仅对数值位进行移位。
        • 左移:低位补1,高位舍弃。
        • 右移:高位补1,低位舍弃。
    • 补码:

      • 正数:
        • 符号位保持不变,仅对数值位进行移位。
        • 左移:低位补0,高位舍弃。
        • 右移:高位补0,低位舍弃。
      • 负数:
        • 符号位保持不变,仅对数值位进行移位。
        • 左移:低位补0,高位舍弃。
        • 右移:高位补1,低位舍弃。
  • 逻辑移位:
    • 逻辑移位可以看作对无符号数的算术移位。
    • 左移:低位补0,高位舍弃。
    • 右移:高位补0,低位舍弃。
  • 循环移位:当左移或右移时,整个二进制串进行循环补位。

浮点数的运算

数据的存储和排列

现代计算机基本上采用字节编址,即每个地址编号对应1字节内存,不同类型的数据占用的字节数不同,而程序中每个数据只给定一个地址,那这个地址是是哪个地址呢?

大小端模式

多字节数据存放在连续的内存中,用最高有效字节(LSB)和最低有效字节(MSB)来表示数据的低位和高位。根据数据字节在内存中存放的顺序不同,可以采取以下两种存储方式:

  • 大端模式:按最高有效字节到最低有效字节的顺序存储。
  • 小端模式:按最低有效字节到最高有效字节的顺序存储。

边界对齐

边界对齐是指当存储的数据长度不够半字或字长度时,通过添加空白字节使其满足长度的存储方式。而非边界对齐是指充分利用每一个字节,不留空白的存储方式。假设现有一台32位可按字节、半字和字寻址的计算机,一个长度为3B的数据D,如果数据以边界对齐的方式存放,那么这个数据可以通过一次字寻址就全部取出。

在这里插入图片描述

但如果使用非边界对齐的方式存放,恰巧这个数据有1B存储到了第一个字,有2B存储到了第二个字,那么无论采用哪种寻址方式都不能通过一次寻址就把这个数据全部取出。此时需要进行两次寻址,并且对高低字节的位置进行调整、连接之后才能得到想要的数据,从而影响了指令的执行效率。

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...