数字电路的优点(一般数字电路就是指二进制数字电路)

  1. 稳定性好,抗干扰能力强
  2. 容易设计,并便于构建大规模集成电路
  3. 信息处理能力强
  4. 精度高
  5. 精度容易保持
  6. 便于存储
  7. 数字电路的设计可编程
  8. 功耗小

常用的数制

常用的几种数制包括:十进制、十六进制、八进制和二进制。

十进制整数就是:

十进制小数就是:

十六进制、八进制和二进制也是同理,只不过十进制考虑的是以十为底,而十六进制就是以十六为第、八进制就是以八为底、二进制就是以二为底。

不同进制的转换

二进制转十进制

十进制转二进制

二进制转十六进制

每四个二进制数凑一组:

十六进制转二进制

只需要把每一位都写成 4 位二进制就可以了

例如

二进制转八进制

八进制转二进制

二进制、八进制和十六进制互相转换

主要还是依赖二进制这个桥梁:

二进制的运算

无符号数

二进制加法运算

二进制减法运算

二进制乘法运算

二进制除法运算

有符号数的源码反码补码

有符号数的计算就比无符号数复杂了。

原码、反码和补码的提出,本质上是计算机硬件设计需求与数学理论相互妥协与演进的结果。它们并非由某个人在同一时刻“发明”,而是为了解决二进制机器进行算术运算(特别是加减法)时遇到的具体工程难题,逐步演化而来的。

编码核心驱动力解决的问题未解决的问题历史地位
原码人类直觉数据的直观表示运算电路复杂、双零早期机器/浮点数尾数
反码简化减法将减法转为加法循环进位、双零过渡期主流(50s-60s)
补码硬件极简统一运算、唯一零、无修正对人类不直观现代计算机绝对标准

计算技巧:正数原码反码补码完全相同,负数求反码只需符号位不变,数值位按位取反,负数计算补码只需在其反码上加一。

原码反码补码原码反码补码
0111+7+7+71000-0-7-8
0110+6+6+61001-1-6-7
0101+5+5+51010-2-5-6
0100+4+4+41011-3-4-5
0011+3+3+31100-4-3-4
0010+2+2+21101-5-2-3
0001+1+1+11110-6-1-2
0000+0+0+01111-7-0-1


原码 (Sign-Magnitude):人类直觉的直接映射

  • 提出动因:直观性与可读性。 在计算机发展的早期,设计者最自然的想法是将人类习惯的十进制正负号概念直接映射到二进制中。既然人有“+/-”的概念,机器就用一个比特位(通常是最高位)来表示符号,其余位表示数值大小。
  • 历史背景:早期的机械计算器和第一代电子管计算机(如部分早期IBM机器)多采用这种表示法。它符合人类的认知习惯,便于人机交互时的输入输出转换。
  • 致命缺陷:
    • 运算复杂:做加法时必须先判断符号位,如果符号不同还要做减法,这导致ALU(算术逻辑单元)电路极其复杂。
    • 零的二义性:存在 +0 (000…0) 和 -0 (100…0) 两种表示,浪费了编码空间且增加了比较逻辑的难度。

原码其实就是,正号写为 0,符号写为 1,第一位往后就是正常的二进制数表达:

反码 (Ones’ Complement):向“统一运算”迈出的过渡一步

  • 提出动因:简化减法电路。 工程师们发现原码做减法太麻烦,希望能把减法变成加法。数学家指出, 可以转化为 的某种形式。反码利用了“按位取反”这一极易实现的硬件操作(只需一组非门),试图通过取反来表示负数,从而让加法器能处理减法。
  • 历史背景:在20世纪50-60年代的许多经典计算机中被广泛使用,例如 CDC 6600(超级计算机之父Seymour Cray的设计)、UNIVAC 1100系列、以及早期的 PDP-1。
  • 遗留问题:
    • 虽然统一了加减法,但反码运算后如果出现进位溢出,需要进行“循环进位”(End-around carry),即把溢出的1加回最低位。这依然增加了硬件时序设计的复杂性。
    • 仍然存在 +0 和 -0 的问题。

正数的反码还是和他的原码一致,负数的反码符号位不变,但是后面的位每一个位都按位取反。

补码 (Two’s Complement):工程最优解的确立

  • 提出动因:彻底消除特殊处理,实现模运算。 为了彻底解决反码的“循环进位”和“双零”问题,补码被引入。其核心数学原理是同余理论(Modular Arithmetic):在一个固定位宽的系统中,减去一个数等价于加上该数关于模()的补数。
  • 关键优势:
    • 零的唯一性:全0即为0,没有负零。
    • 运算纯粹:加减法完全统一,符号位参与运算,溢出直接丢弃即可,无需任何额外修正电路。这使得ALU设计达到最简。
    • 多表示一个负数:n位补码能表示 到 ,比原码和反码多一个有效负数。
  • 历史转折: 虽然补码的数学概念很早就存在,但在早期并未立刻统治市场。直到20世纪60年代中期,随着集成电路的发展和对运算效率的极致追求,补码的优势才压倒性地体现出来。IBM System/360(1964年发布)作为划时代的架构,全面采用补码表示整数,确立了行业标准。此后,几乎所有通用处理器(x86, ARM, RISC-V等)都只使用补码。

补充说明:值得注意的是,虽然现代计算机的整数运算完全基于补码,但在IEEE 754浮点数标准中,阶码使用了移码(Biased),而尾数实际上使用的是原码(隐藏位+符号位)。这说明原码并没有完全消失,只是在不同的计算场景下,工程界选择了最适合该场景的编码方案。简而言之,这三种码的演变史,就是一部从“方便人理解”走向“方便机器执行” 的计算机体系结构进化史。

二进制的优缺点

综上我们可以看出二进制的优缺点:

二进制的优点:用电路的两个状态——开关来表示二进制数,数码的存储和传输简单、可靠。

二进制的缺点:位数较多,使用不便;不合人们的习惯,输入时将十进制转换成二进制,运算结果输出时再转换成十进制数。