数据与文字的表示方法

数据格式

计算机中的数据分为数值数据和非数值数据(字符、汉字、图像、声音等)。数值数据在计算机内部采用二进制编码表示,根据小数点位置是否固定,分为定点表示法和浮点表示法。

  • 定点表示法:小数点位置固定不变,分为定点整数(纯整数)和定点小数(纯小数)。定点数通常用补码或原码表示。
  • 浮点表示法:形如 N = M × R^E,其中M为尾数(定点小数),E为阶码(整数),R为基数(通常为2)。IEEE 754标准定义了单精度(32位)、双精度(64位)等浮点数格式。

数的机器码表示

计算机中为了简化运算电路,通常使用以下机器码表示有符号数:

  • 原码:符号位(0正1负)加绝对值。简单但不便于加减运算。
  • 反码:正数同原码,负数符号位不变,其余位取反。主要用于中间计算。
  • 补码:正数同原码,负数反码加1。补码可将减法转化为加法,是现代计算机最常用的有符号整数编码。
  • 移码:在补码基础上加上偏置常数(通常2^(n-1)),用于浮点数的阶码表示。

字符与字符串的表示方法

字符编码采用标准编码方案,如ASCII(美国信息交换标准代码)使用7位或8位二进制表示128个基本字符(英文大小写字母、数字、标点符号、控制字符)。扩展ASCII(ISO-8859)支持西欧语言。Unicode(如UTF-8、UTF-16)统一表示全世界所有字符,支持多语言混排。字符串在内存中通常以连续字节存储,以空字符(’\0’)或长度字段作为结束标志。

汉字的表示方法

汉字编码分为输入码(拼音、五笔等)、机内码(存储编码,如GB2312、GB18030、BIG5、Unicode中的汉字区)、字形码(点阵或矢量字体)。国家标准GB2312包含6763个常用汉字,GB18030兼容GB2312并扩展至7万余汉字。在Unicode中,汉字位于CJK统一表意文字区(U+4E00至U+9FFF)。

校验码

校验码用于检测数据在传输或存储过程中的错误。常见类型:

  • 奇偶校验码:增加一位奇偶位,使整个码字中1的个数为奇数(奇校验)或偶数(偶校验)。只能检测奇数个错误,不能纠错。
  • 海明校验码:通过在数据位之间插入多个校验位,能够检测并纠正一位错误(或者检测两位错)。
  • 循环冗余校验(CRC):将数据视为多项式,除以生成多项式得到余数作为校验码。CRC能检测突发错误,广泛用于网络通信和存储设备。

定点加法、减法运算

补码加法

补码加法的公式:[X+Y]补 = [X]补 + [Y]补 (mod 2^n)。即直接将两个数的补码相加,若最高位产生进位则丢弃该进位(模2^n运算)。正负数均可直接相加,无需特殊处理。例如:X=5(0101),Y=-3(1101),和=2(0010)。

补码减法

补码减法转化为加法:[X-Y]补 = [X]补 + [-Y]补。其中[-Y]补可通过将[Y]补连同符号位一起取反后加1得到。例如:X=5(0101),Y=3(0011),则[-Y]补=1101,相加得0010(即2)。

溢出概念与检测方法

当运算结果超出机器数表示范围时发生溢出。对于补码加减法,溢出检测方法:

  • 双符号位法(变形补码):用两个符号位,如00为正,01为上溢,10为下溢,11为负。结果的两个符号位不同则表示溢出。
  • 单符号位法:比较操作数的符号和结果的符号。若两个正数相加得负数,或两个负数相加得正数,则溢出。进位检测法:最高有效位的进位与符号位的进位不同时溢出。

基本的二进制加法/减法器

一位全加器(FA)是实现加法/减法的基础。它有三个输入:A、B、低位进位Cin;两个输出:和S、进位Cout。逻辑表达式:S = A ⊕ B ⊕ Cin;Cout = AB + (A⊕B)Cin。多个全加器串联构成行波进位加法器(RCA)。减法可通过将减数取反(按位取反后加1,即使用异或门控制)并设置初始进位为1来实现。为提高速度,可采用超前进位加法器(CLA)并行计算进位。

定点除法运算

原码除法算法原理

原码除法:商符由被除数和除数的符号位异或得到;数值部分为绝对值相除。常见算法:

  • 恢复余数法:每次用余数减除数,若结果为负则恢复余数并商0,左移再试;若为正则商1,左移继续。速度较慢。
  • 不恢复余数法(加减交替法):根据余数符号决定下一步是加除数还是减除数,无需恢复,减少操作次数。计算机中常用此方法实现定点除法。

并行除法器

为提高除法速度,可采用并行除法器,如基于数组结构或加法器网络的除法器。基本原理是类似于手工除法的逐次比较,但通过硬件并行加速。现代CPU中的除法器通常采用SRT算法(通过冗余位估计商数字),可以在每步产生多位商,并利用进位保留加法器(CSA)提高速度。

定点运算器的组成

逻辑运算

除了算术运算,运算器还需支持逻辑运算:与(AND)、或(OR)、非(NOT)、异或(XOR)、移位(算术左移/右移、逻辑左移/右移、循环移位)。逻辑运算按位进行,无进位/借位。移位操作常用于乘除法的快速实现和位处理。

多功能算术/逻辑运算单元

ALU(算术逻辑单元)是一个组合逻辑电路,能够根据控制信号选择执行多种运算(加、减、与、或、异或、移位等)。典型的ALU使用一个操作码(如4位)来选择运算类型。现代ALU还包含状态寄存器(标志位:Z(零)、C(进位)、V(溢出)、N(负))。例如,74181芯片是一个4位ALU,可执行16种算术和逻辑运算。

内部总线

运算器内部使用总线连接ALU、寄存器组(累加器、通用寄存器、暂存器等)和内部数据通路。总线分为单总线、双总线、三总线结构:

  • 单总线:所有操作数通过一条总线传输,结构简单但速度慢(需要分时传送两个操作数)。
  • 双总线:两个操作数可同时通过两条总线送入ALU,速度较快。
  • 三总线:两个操作数总线和一个结果总线,可并行输入输出,性能最高。

定点运算器的基本结构

定点运算器通常包括:

  • ALU:核心运算部件。
  • 通用寄存器组(Register File):存放操作数和中间结果。
  • 状态寄存器(PSW/Flags):存放ALU运算产生的状态标志。
  • 数据总线接口:与数据总线相连。
  • 控制逻辑:接收控制信号,协调数据通路。

运算器可采用流水线结构进一步提高吞吐率。

浮点运算方法和浮点运算器

浮点加法、减法运算

浮点加减法运算分为以下步骤:

  1. 对阶:使两数阶码相等。小阶向大阶看齐,尾数右移相应位数(右移时保留保护位和舍入位)。
  2. 尾数加减:将对阶后的尾数按定点小数加减法运算。
  3. 规格化:若结果尾数不符合规格化形式(如绝对值≥1或<0.5),则进行左规(尾数左移,阶码减1)或右规(尾数右移,阶码加1)。
  4. 舍入:采用就近舍入、朝0舍入等模式,处理右移时移出的位。
  5. 溢出判断:阶码上溢或下溢时产生异常(如无穷大、非规格化数)。

浮点乘法、除法运算

  • 浮点乘法:乘积的阶码 = 两数阶码相加(减去偏置常数),尾数相乘(定点乘法)。然后规格化、舍入、判溢出。
  • 浮点除法:商的阶码 = 被除数阶码 - 除数阶码(加上偏置常数),尾数相除。同样需要规格化等步骤。

浮点运算流水线

为了提高浮点运算吞吐率,现代处理器采用流水线浮点单元(FPU)。浮点流水线通常分为若干级:指令译码、操作数读取、执行(对阶、加减、规格化等流水多级)、写回结果。例如,Intel的FPU可同时处理多条浮点指令。流水线中存在资源冲突和写后读等冒险,需通过转发、停顿等机制解决。