原码

来自GSXAB的知识库
原码
术语名称 原码
英语名称 sign–magnitude
别名 sign-and-magnitude, signed magnitude, 符值表示

原码(sign–magnitude)是一种计算机内的定点数表示方法(机器数)。对有符号定点整数,在原码中 [math]\displaystyle{ n }[/math]二进制位中的最高位(most significant bit, MSB)被留作符号位(sign bit),剩下的 [math]\displaystyle{ (n-1) }[/math]数值位[1]用于容纳包含 0 在内的各 [math]\displaystyle{ 2^{n-1} }[/math] 个数,并直接使用绝对值二进制表示。

对于定点纯小数,原码表示为在其小数点前方增加一符号位。由于原码概念的核心是符号位与数值位的表示,与实际是定点整数或定点小数无关,方便起见,本文主要以整数为基准讨论原码表示,小数除了数值位解释成的绝对值有区别外完全对应。

定义

原码(sign–magnitude)指用 [math]\displaystyle{ n }[/math] 位二进制位构成的机器数表示有符号数的方法,其中将其最高位留作符号位(sign bit),剩余 [math]\displaystyle{ (n-1) }[/math] 位数值位作为绝对值部分:

  • 符号位:取 0 或 1 :取 0 时表示符号为 + ,符号位取 1 时表示符号为 - 。
  • 数值位:取值表示这个数有相同的绝对值(定点整数或定点小数)。

integer_sign_magnitude.svg

具体对应:

  • [math]\displaystyle{ 0;00\cdots0 }[/math][math]\displaystyle{ 0;11\cdots1 }[/math] 对应 [math]\displaystyle{ +0 }[/math][math]\displaystyle{ +2^{n-1}-1 }[/math]
  • [math]\displaystyle{ 1;00\cdots0 }[/math][math]\displaystyle{ 1;11\cdots1 }[/math] 对应 [math]\displaystyle{ -0 }[/math][math]\displaystyle{ -(2^{n-1}-1) }[/math]

integer_sign_magnitude_range.svg

注意:原码表示中,存在 [math]\displaystyle{ 0;00\cdots0 }[/math][math]\displaystyle{ 1;00\cdots0 }[/math] 两个机器数,其真值分别是 [math]\displaystyle{ +0 }[/math][math]\displaystyle{ -0 }[/math] 。因此, [math]\displaystyle{ 2^n }[/math] 个二进制数作为机器数时,所对应的真值只有 [math]\displaystyle{ (2^n-1) }[/math] 个不同的,真值范围为 [math]\displaystyle{ -(2^{n-1}-1), \cdots, 2^{n-1}-1 }[/math]

相关计算

如果只用原码,不借助其他表示,进行加减法运算时,原码需要类似人类计算时,判断符号位才能确定绝对值部分要进行的实际加减运算,而且需要决策减法的大小关系才能确认顺序。因此直接的加减法较为困难,一般不用在计算。


数的内部表示
十进制数的二进制编码 BCDGray 码奇偶校验码 、 字符表示 -
整数的机器数 定点整数:无符号定点整数、有符号定点整数 定点数(有符号:原码反码补码移码
小数的机器数 定点小数
浮点数IEEE 754 浮点数
  1. 没有对应英语术语,中文网络能查询到的对应词汇都是强行翻译,在英文网络中几乎找不到使用,通常只有“最高位是符号位,剩下的位表示绝对值”的表述。