计算机组成原理——现代计算机的数制、编码和计算
创始人
2025-05-28 17:55:25
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存储到了第二个字,那么无论采用哪种寻址方式都不能通过一次寻址就把这个数据全部取出。此时需要进行两次寻址,并且对高低字节的位置进行调整、连接之后才能得到想要的数据,从而影响了指令的执行效率。

在这里插入图片描述

相关内容

热门资讯

容芯致远获天使轮融资 2026年5月8日,北京容芯致远科技有限公司(简称“容芯致远”)宣布完成天使轮融资。本轮融资由万利达...
试管期间能运动吗?避开这些坑,... 做试管的姐妹都纠结:不动怕气血差、影响卵泡,动了又怕伤子宫、毁着床,到底该怎么办?其实试管不用“躺平...
原创 今... 2026年5月6日,国内金价算是彻底“凉”了一下,你看那AU9999现货黄金,直接跌到了1013元一...
美国5月消费者信心再创历史新低... 财联社5月8日讯(编辑 牛占林)随着中东战争持续推高能源价格,美国消费者信心本月继续下滑,并再度刷新...
“压高盛一头”!江西一精神病院... 蓝鲸新闻5月8日讯(记者 徐甘甘)5月8日,盛通股份(002599.SZ)一季报引发资本市场热议——...
2026年企业短视频能力升级:... 本篇将回答的核心问题 2026年企业短视频营销面临哪些关键挑战,有效应对策略是什么? 服务机构的能力...
江西一精神病院炒股炒成上市公司... 红星资本局5月8日消息,近日,上市公司盛通股份(002599.SZ)发布一季报,披露了前十大股东名单...
企业IP打造指南:小公司低成本... 小公司做企业IP,不是为了装门面,而是让客户在没见到你之前,就能通过内容知道你是谁、你解决什么问题、...
官方:赵心童入选世界斯诺克名人... 北京时间5月8日消息,世界斯诺克巡回赛(WST)今日正式公布了2025/26赛季年终奖项及名人堂更新...
小灰熊AI学员王锋:希望能跟上... 35了,老程序员了。 从进入互联网行业到现在,其实已经做了很多年移动端开发。最早那几年,安卓行业发展...
原创 2... 2026年全国两会把稳定房地产市场列为重点工作,政府工作报告明确提出因城施策控增量、去库存、优供给。...
一年翻倍,六年未归——徽商银行... 文:向善财经 今年的港股市场,与A股市场出现了明显的分化。 A股这边,科技板块在AI浪潮中热闹非凡;...
古井贡酒2025:在行业深度调... 以“稳”为底、以“新”为翼。 文/每日财报 杜康 在行业库存高企、价格倒挂的背景下,当多数酒企在为...
好上好8408万收购鼎瑞芯加码... 5月7日晚,好上好(001298.SZ)抛出一份收购公告,拟以8408万元现金收购深圳市鼎瑞芯科技有...
全面大撤离!李嘉诚英国“套现”... 突发,李嘉诚又卖了。 这次,套现了455亿。 金额不少,但更值得关注的是透露着不同寻常的信号。 因为...
油气价格上涨加剧法国一季度贸易... 据新华社,法国海关7日发布的数据显示,受中东局势推高国际油气价格影响,法国今年第一季度贸易逆差扩大至...
昆仑芯启动科创板IPO上市辅导... 5月8日,据证监会官网显示,昆仑芯(北京)科技股份有限公司于2026年5月7日正式启动科创板上市辅导...
贵州茅台酒股份有限公司关于回购... 来源:上海证券报 证券代码:600519 证券简称:贵州茅台 公告编号:临2026-016 贵州茅...
百度昆仑芯启动科创板上市辅导,... 5月8日,证监会官网显示,昆仑芯(北京)科技股份有限公司 (下称“昆仑芯”)于2026年5月7日正式...
滕州信华的承压时刻:罚单、失信... 2026年4月末,滕州信华美元债单日跌近2%,关联方被列“老赖”。半年前,这家AA+城投曾因非市场化...