当前位置: 首页 > news >正文

计算机组成原理:进位计数制与进制转换

文章目录

      • 进位计数制
      • 常见进制数
      • 进制转换
        • 任意进制 → 十进制
        • 二进制 ↔ 八进制 | 十六进制
          • 二进制 → 八进制
          • 二进制 → 十六进制
          • 八进制 → 二进制
          • 十六进制 → 二进制
        • 十进制 → 任意进制
          • 除基取余(针对整数部分)
          • 乘基取整(针对小数部分)
        • 十进制 → 二进制

进位计数制

进位计数制是一种利用有限的数字符号通过进位来表示任意数值的方法。其核心思想是基于位权原则,每一位上的数值都与该位的权值相乘,然后将所有结果相加得到最终的实际数值。这种表示方法不仅简洁高效,而且便于计算机硬件实现和运算操作。

常见的进位计数制包括二进制、八进制、十进制和十六进制等。

常见进制数

在进位计数法中,每个数位所用到的不同数码的个数称为基数。十进制的基数为10(0~9),每个数位计满 10 就向高位进位,即“逢十进一”。十进制数 101,其个位的 1 显然与百位的 1 所表示的数值是不同的。

例如,十进制数 123 的各位权值分别为 100 → 10²10 → 10¹1 → 10⁰,其数值即为 1 × 100 + 2 × 10 + 3 × 1 = 123 1×100 + 2×10 + 3×1 = 123 1×100+2×10+3×1=123

每个数码所表示的数值等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为位权。一个进位数的数值大小就是它的各位数码按权相加。

![[十进制.png]]

  • d 表示数码,其下标比指明了该数码的位置

我们通过十进制数推广至任意进制数(例如二进制、八进制、十六进制)

![[常见进制表示.png]]

  • 二进制:计算机中用得最多的是基数为 2 的计数制,即二进制。二进制只有 0 和 1 两种数码,计数“逢二进一”。它的任意数位的权为 2 i 2^i 2i,i 为所在位数。

    例如,二进制数 1011 的各位权值分别为 8 → 2³4 → 2²2 → 2¹1 → 2⁰。通过将每一位的数值与其权值相乘并求和,可以将其转换为十进制数 11。

  • 八进制:基数为 8,有 0~7 共 8 个不同的数码。计数逢八进一。因为 r = 8 = 2 3 r=8=2^3 r=8=23,所以把二进制中的 3 位数码编为一组就是 1 位八进制数码,两者之间的转换极为方便。

    例如,八进制数 37 的各位权值分别为 8 → 8¹1 → 8⁰,转换为十进制数为 3 × 8 + 7 × 1 = 31 3×8 + 7×1 = 31 3×8+7×1=31

  • 十六进制:基数为 16,有 09、AF 共 16 个不同的数码,其中 A~F 分别表示 10~15。计数逢十六进一。因为 r = 16 = 2 4 r=16=2^4 r=16=24,所以 4 位二进制数码与 1 位十六进制数码相对应。

    例如,十六进制数 3A 的各位权值分别为 16 → 16¹1 → 16⁰,转换为十进制数为 3 × 16 + 10 × 1 = 58 3×16 + 10×1 = 58 3×16+10×1=58

可以用后缀字母标识一个数的进位计数制,用 B 表示二进制,用 O 表示八进制,用 D 表示十进制(通常直接省略),用 H 表示十六进制,有时也用前缀 0x 表示十六进制数。

进制转换

![[进制转换.png]]

任意进制 → 十进制

使用 按“权”展开法 完成 任意进制 → 十进制 的转换,我们可以将位权都统一到 2 的幂次,以方便计算。

![[按“权”展开法.png]]

  1. 确定每一位的权值:从右到左依次确定每一位的权值。

  2. 将每一位数字乘以其权值:将每一位的数字与其对应的权值相乘。

  3. 将所有乘积相加:将上述乘积相加,得到最终的十进制结果。

常用的 2 的幂次方数

![[常用的 2 的幂次方数.png]]

二进制 ↔ 八进制 | 十六进制

![[二进制 ↔ 八进制 十六进制.png]]

  • 使用 3 位二进制数来对应 1 位八进制数,也可以表达为 2 3 = 8 1 2^3 = 8^1 23=81,完成 二进制 ↔ 八进制 的转换

  • 使用 4 位二进制数来对应 1 位十六进制数,也可以表达为 2 4 = 1 6 1 2^4 = 16^1 24=161,完成 二进制 ↔ 十六进制 的转换

转换时,不要忘记小数点

常用进制数对照表:

![[常用进制数对照表.png]]

二进制 → 八进制
  • 对于整数部分,从低位到高位,沿着向左的方向,每 3 位划分为 1 组,高位不足 3 位而无法划分为 1 组时,补充相应数量个 0 凑足 3 位,进而可划分为 1 组

  • 对于小数部分,从高位到低位,沿着向右的方向,每 3 位划分为 1 组,低位不足 3 位而无法划分为 1 组时,补充相应数量个 0 凑足 3 位,进而可划分为 1 组

之后,将每组 3 位进制数转换成对应的八进制数即可

![[二进制 → 八进制.png]]

二进制 → 十六进制
  • 对于整数部分,从低位到高位,沿着向左的方向,每 4 位划分为 1 组,高位不足 4 位而无法划分为 1 组时,补充相应数量个 0 凑足 4 位,进而可划分为 1 组

  • 对于小数部分,从高位到低位,沿着向右的方向,每 4 位划分为 1 组,低位不足 4 位而无法划分为 1 组时,补充相应数量个 0 凑足 4 位,进而可划分为 1 组

之后,将每组 4 位进制数转换成对应的八进制数即可

![[二进制 → 十六进制.png]]

八进制 → 二进制

将八进制数每个数位上的 1 位 八进制数转换为 3 位二进制数即可,若整数部分的最高位、小数部分的最低位为 0,将其去掉即可。

![[八进制 → 二进制.png]]

十六进制 → 二进制

将十六进制数每个数位上的 1 位 十六进制数转换为 4 位二进制数即可,若整数部分的最高位、小数部分的最低位为0,将其去掉即可。

![[十六进制 → 二进制.png]]
十六进制数转换为八进制数(或八进制数转换为十六进制数)时,先将十六进制(八进制)数转换为二进制数,然后由二进制数转换为八进制(十六进制)数较方便。

十进制 → 任意进制

通过 除基取余,乘基取整 (注意,基数的值与进制相关)的方式完成 十进制 → 任意进制 的转换(也可以二进制数作为桥梁)

这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分采用除基取余法,对小数部分采用乘基取整法,最后将整数部分与小数部分的转换结果拼接起来。

![[除基取余,乘基取整.png]]

除基取余(针对整数部分)

整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位(除基取余,先余为低,后余为高),商为 0 时结束。

在这里插入图片描述

将按权展开形式中的整数部分除以基数 r,得到的式子中的最后一项 d 0 r \frac{d_0}{r} rd0 中的 d 0 d_0 d0 就是余数,也是目标进制数整数部分的最低位 d 0 d_0 d0,其余部分为

将商继续除以基数 r,得到的式子中的最后一项 d 1 r \frac{d_1}{r} rd1 中的 d 1 d_1 d1 就是新的余数,也是目标进制数整数部分自最低位起的第二位 d 1 d_1 d1,其余部分为新的

参照上述过程进行计算,直到商为 0 时结束,这就是除基取余的原理

![[十进制 → 任意进制.png]]

以下是十进制整数分别转换为二进制、八进制、十六进制的示例:

![[除基取余.png]]

乘基取整(针对小数部分)

小数部分乘基取整,最先取得的整数为数的最高位,最后取得的整数为数的最低位(乘基取整,先整为高,后整为低),乘积为10(或满足精度要求)时结束
![[乘基取整.png]]

将按权展开形式中的小数部分乘以基数 r,得到的式子中的第一项 d − 1 × r 0 {d_{-1}}\times{r^0} d1×r0 中的 是整数,其取值范围取决于要转换成的目标进制(如二进制为 0-1,八进制为 0-7,十六进制为 0-15),而这个整数就是目标进制数小数部分的第一位,其余部分为小数 或 0。

将小数继续乘以基数 r,得到的式子中的第一项 d − 2 × r 0 {d_{-2}}\times{r^0} d2×r0 中的 是整数,而这个整数就是目标进制数小数部分的第二位,其余部分为小数 或 0。

参照上述过程进行计算,直到小数为 0 或达到指定精度时结束,这就是乘基取整的原理。

![[乘基取整(针对小数部分).png]]

以下是十进制小数分别转换为二进制、八进制、十六进制的示例:

![[十进制小数转换为其他进制.png]]

在计算机中,小数和整数不一样,整数可以连续表示,但小数是离散的,所以并不是每个十进制小数都可以准确地用二进制小数表示。例如0.3,使用乘基取整时,无论经过多少次乘二取整转换都无法得到精确的结果,出现计算结果无限循环,导致无限循环小数的情况,此时我们只要达到所指定的要保留小数点后面的位数即可。但任意一个二进制小数都可以用十进制小数精确表示

十进制 → 二进制

也可以使用 凑值法 完成十进制 → 二进制的转换

![[凑值法.png]]

相关文章:

  • #9 【code】实现扩散模型的一个jupyter notebook
  • 二、Visual Studio2022配置OpenGL环境
  • CameraX学习2-关于录像、慢动作录像
  • 【单片机通信技术】STM32 HAL库 SPI主从机通过串口发送数据
  • MySQL表空间碎片原理和解决方案
  • [HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署
  • 基于PySide6的CATIA零件自动化着色工具开发实践
  • 导入 Excel 规则批量修改或删除 Excel 表格内容
  • 【SegRNN 源码理解】【今天不水文系列】编码器部分理解
  • 云曦春季开学考复现(2025)
  • Linux基础--进程管理
  • 博弈是达到均衡状态的简单理解
  • 【网络】HTTP协议、HTTPS协议
  • PyTorch系列教程:编写高效模型训练流程
  • go的grpc
  • 视觉 Yolov11 环境配置(GPU版)
  • 使用websocket,注入依赖service的bean为null
  • golang从入门到做牛马:第四篇-Go语言基础语法
  • C++20 模块:告别头文件,迎接现代化的模块系统
  • hyperlane使用SSE实现服务端主动推送
  • 做网站建设有前途那/长沙网站提升排名
  • wordpress 特效/百度seo排名软件
  • 网站开发架构师/网页生成器
  • 中山如何建设网站/网站收录工具
  • 建设厅质监总站网站/网页代码模板
  • 简历上作品展示网站链接怎么做/培训行业seo整站优化