欢迎光临
我们一直在努力

计算机组成原理:数制与编码

文章目录

  • 前言
  • 一、进位计数制:从十进制到二进制的本质
    • 1.1 什么是进位计数制
    • 1.2 计算机为什么选择二进制?
    • 1.3 数制转换的核心方法
      • (1)R进制 → 十进制:按权展开求和
      • (2)十进制 → R进制:整数小数分开处理
      • (3)二进制 ↔ 八/十六进制:分组快速转换
  • 二、数值的机器编码:定点数与补码的智慧
    • 2.1 定点数:小数点“固定”的数值表示
    • 2.2 原码、反码、补码、移码:四种编码的对比
      • 补码:计算机运算的核心选择
    • 2.3 补码运算与溢出判断
    • 2.4 浮点数:用科学计数法扩大表示范围
      • IEEE 754 标准
  • 三、字符编码:让计算机读懂人类文字
    • 3.1 ASCII码:西文字符的基石
    • 3.2 汉字编码:从国标到统一
    • 3.3 Unicode与UTF-8:全球化的编码方案
      • 核心区别
      • UTF-8的变长编码规则
  • 四、校验码:数据传输的容错机制
    • 4.1 奇偶校验:最简单的检错码
    • 4.2 海明码:能纠错的分组校验
    • 4.3 CRC循环冗余校验
  • 五、总结

前言

当我们在键盘上敲下文字、在屏幕上看到数字、运行程序进行计算时,计算机底层其实只在做一件事:处理0和1的电信号。从人类熟悉的十进制数字、中英文文字,到机器能识别的二进制数据,中间的桥梁就是数制与编码。它是计算机组成原理的入门第一课,也是理解CPU运算、存储器设计、数据传输的底层逻辑基础。今天我们就从原理出发,彻底搞懂数制转换、数值编码、字符编码和校验码的核心逻辑。


提示:以下是本篇文章正文内容,下面案例可供参考

一、进位计数制:从十进制到二进制的本质

1.1 什么是进位计数制

任何一种数制都包含三个核心要素:

  • 数码:数制中表示基本数值的符号,比如十进制的0~9
  • 基数:数码的个数,十进制基数为10,二进制基数为2
  • 位权:每一位数码对应的权重,是基数的幂次,比如十进制百位的位权是10²

我们熟悉的十进制,本质就是“逢十进一”,每一位的数值 = 数码 × 对应位权。

1.2 计算机为什么选择二进制?

这不是偶然,而是硬件层面的必然:

  • 物理实现简单:电路的通/断、电平的高/低刚好对应0和1两种状态
  • 运算规则简单:二进制加法、乘法规则远少于十进制,简化运算电路设计
  • 可靠性高:两种状态区分度高,抗干扰能力强
  • 计算机中常用的数制除了二进制,还有八进制、十六进制,本质是二进制的“简写形式”——3位二进制对应1位八进制,4位二进制对应1位十六进制,方便人类读写。

    1.3 数制转换的核心方法

    (1)R进制 → 十进制:按权展开求和

    把每一位数码乘以对应位权,相加得到十进制结果。 例:二进制 1011.01 转十进制 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 0×2⁻¹ + 1×2⁻² = 8 + 0 + 2 + 1 + 0 + 0.25 = 11.25

    (2)十进制 → R进制:整数小数分开处理

    • 整数部分:除基取余,逆序排列。不断除以基数,记录余数,直到商为0,余数从下往上读。
    • 小数部分:乘基取整,顺序排列。不断乘以基数,记录整数部分,直到小数为0或达到精度要求,整数从上往下读。

    例:十进制 13.625 转二进制

    • 整数13:13÷2余1,6÷2余0,3÷2余1,1÷2余1 → 逆序为 1101
    • 小数0.625:0.625×2=1.25(取1),0.25×2=0.5(取0),0.5×2=1.0(取1) → 顺序为 101
    • 最终结果:1101.101

    (3)二进制 ↔ 八/十六进制:分组快速转换

    • 二进制转八进制:从小数点开始,整数左、小数右每3位一组,不足补0,每组对应1位八进制数
    • 二进制转十六进制:每4位一组,对应1位十六进制数

    例:二进制 1011010.11 转十六进制 整数补0:0101 1010 → 5 A 小数补0:1100 → C 结果:5A.C

    二、数值的机器编码:定点数与补码的智慧

    数制解决了“数值怎么表示”,但在计算机里,正负号、小数点怎么存?这就需要数值编码。

    2.1 定点数:小数点“固定”的数值表示

    定点数约定小数点的位置固定不变,分为两种:

    • 定点整数:小数点在最低位之后,所有位都是整数部分
    • 定点小数:小数点在符号位之后,所有位都是小数部分

    定点数的优点是电路简单,缺点是表示范围小,精度和范围难以兼顾。

    2.2 原码、反码、补码、移码:四种编码的对比

    对于有符号数,最高位为符号位(0正1负),剩下的是数值位,四种编码规则不同:

    编码类型正数规则负数规则零的表示核心用途
    原码 符号位0 + 数值位 符号位1 + 数值位 两种:+0和-0 直观,人类易读
    反码 与原码相同 符号位不变,数值位按位取反 两种:+0和-0 补码的过渡
    补码 与原码相同 反码末位加1 唯一:全0 CPU运算,减法变加法
    移码 补码符号位取反 补码符号位取反 唯一 浮点数阶码,方便比较

    补码:计算机运算的核心选择

    补码是计算机中最重要的编码,它解决了两个关键问题:

  • 统一加减法电路:减法可以转化为“加上负数的补码”,CPU只需要加法器就能完成所有运算,大幅简化硬件设计。
  • 零的表示唯一:8位原码中+0是00000000,-0是10000000;补码中只有00000000表示0,多出的10000000用来表示-128,扩大了表示范围。
  • 8位二进制编码范围对比:

    • 原码:-127 ~ +127
    • 补码:-128 ~ +127

    2.3 补码运算与溢出判断

    补码加法规则:[A+B]补 = [A]补 + [B]补 当运算结果超出表示范围时,就会发生溢出,常用双符号位法(变形补码)判断:

    • 双符号位相同(00/11):无溢出
    • 双符号位不同(01/10):溢出;01正溢,10负溢

    2.4 浮点数:用科学计数法扩大表示范围

    定点数范围有限,要表示极大或极小的数,就需要浮点数,本质是二进制的科学计数法: N = 尾数M × 2^阶码E

    一个浮点数由阶码和尾数两部分组成:

    • 阶码:整数,常用移码,表示小数点的位置
    • 尾数:定点小数,常用补码/原码,表示有效数字

    IEEE 754 标准

    现代计算机通用的浮点数标准,分为单精度(32位float)和双精度(64位double):

    类型符号位S阶码E尾数M总位数阶码偏移量
    单精度float 1位 8位 23位 32位 127
    双精度double 1位 11位 52位 64位 1023

    关键规则:

  • 规格化浮点数的尾数最高位默认是1,不存储,节省1位空间(隐藏位1)
  • 阶码用移码表示,偏移量为127(单精度),即真实阶码 = 阶码值 – 127
  • 例:十进制 5.25 转IEEE754单精度

  • 转二进制:5.25 = 101.01 = 1.0101 × 2²
  • 符号位S=0(正数)
  • 阶码E = 2 + 127 = 129 = 10000001
  • 尾数M = 0101 后面补0到23位:01010000000000000000000
  • 最终:0 10000001 01010000000000000000000
  • 三、字符编码:让计算机读懂人类文字

    数值可以转二进制,但文字、符号怎么表示?答案是字符编码——给每个字符分配唯一的二进制编号。

    3.1 ASCII码:西文字符的基石

    ASCII(美国信息交换标准代码)是最早的通用字符编码,用7位二进制表示128个字符,包括大小写字母、数字、标点和控制字符。计算机中用1字节(8位)存储,最高位默认0,扩展ASCII则用最高位表示额外128个字符。

    3.2 汉字编码:从国标到统一

    汉字数量多,1字节不够用,因此发展出多字节编码:

    • GB2312:最早的国标码,2字节编码,收录6763个常用汉字
    • GBK:GB2312的扩展,兼容前者,收录2万多汉字,包含繁体
    • GB18030:最新国标,变长编码,覆盖更多字符

    3.3 Unicode与UTF-8:全球化的编码方案

    核心区别

    • Unicode:是字符集,给全世界所有字符分配唯一的“编号”(码点),不关心怎么存储
    • UTF-8:是Unicode的一种编码实现方式,规定码点怎么转成二进制字节流

    UTF-8的变长编码规则

    UTF-8用1~4字节表示一个字符,兼容ASCII:

    • 单字节(ASCII字符):以0开头,0xxxxxxx
    • 多字节:首字节前n个1表示总字节数,后续字节都以10开头
      • 2字节:110xxxxx 10xxxxxx
      • 3字节:1110xxxx 10xxxxxx 10xxxxxx
      • 4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    UTF-8是目前互联网的主流编码,优势是兼容ASCII、无字节序问题、节省英文存储空间。

    四、校验码:数据传输的容错机制

    数据在存储、传输过程中可能发生位翻转(0变1/1变0),校验码就是用来检测甚至纠正错误的编码。

    4.1 奇偶校验:最简单的检错码

    在数据位后加1位校验位,使整个编码中1的个数为奇数(奇校验)或偶数(偶校验)。

    • 优点:实现简单,开销小
    • 缺点:只能检测1位错误,无法检测偶数位错误,也不能纠错

    4.2 海明码:能纠错的分组校验

    海明码通过在数据位中插入多个校验位,对数据进行分组奇偶校验,不仅能检测1位错误,还能定位错误位置并自动纠正。

    • 校验位位置:第2⁰、2¹、2²……位(即1、2、4、8……位)
    • 核心原理:每个校验位负责一组数据位,出错时通过各组校验结果的异或,直接定位错误位

    4.3 CRC循环冗余校验

    CRC基于多项式除法,用生成多项式对数据做模2运算,生成校验码(冗余码),接收方用同样的多项式校验。它检错能力强、计算速度快,广泛用于网络通信、磁盘存储等场景。

    五、总结

    数制与编码看似是计组的入门知识点,实则贯穿整个计算机体系:

    • 数制是数值表示的基础,二进制是硬件物理特性的选择
    • 补码等数值编码简化了CPU运算电路,是计算机算术运算的核心
    • 字符编码搭建了人类语言与机器语言的桥梁
    • 校验码保障了数据存储与传输的可靠性

    理解这些底层逻辑,你才能明白为什么int类型范围是-2147483648到2147483647,为什么浮点数会有精度丢失,为什么编程时会遇到乱码问题——本质都是数制与编码在底层的体现。

    赞(0)
    未经允许不得转载:171主机测评 » 计算机组成原理:数制与编码
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址