整数的表示

需了解原码、补码的计算方法,为后续内容的基础。

BCD码

BCD(Binary-Coded Decimal)码是一种二进制编码方法,用于表示十进制数字。每个十进制数字(0-9)都使用四位二进制数字表示。

BCD码的基本思路是单独表示每个十进制数字的二进制值,而不是像传统的二进制数系统那样对整个数字进行编码。例如,在传统的二进制编码中,数字"19"会表示为10011,但在BCD中,它被表示为两个独立的数字:“0001”(对应于1)和“1001”(对应于9),因此整个表示为“0001 1001”。

0 - 0000    1 - 0001    2 - 0010
3 - 0011    4 - 0100    5 - 0101
6 - 0110    7 - 0111    8 - 1000
9 - 1001

BCD编码在某些应用中是很有用的,特别是在需要与十进制界面进行交互的地方,如数字显示或某些早期的计算机系统。尽管它不如纯二进制编码效率高,但它简化了与十进制数据的转换过程。

整数的表示

原码

原码(Sign-Magnitude)是一种简单的方式来表示二进制中的有符号整数。在这种表示法中,数字的最高位(最左边的位)用于表示符号,其余的位表示数字的大小。通常,符号位为0表示正数,而1表示负数。

表示方法

原码的表示方法:

  1. 正数的原码:最高位为0,其余位表示这个数的绝对值的二进制形式。
  2. 负数的原码:最高位为1,其余位表示这个数的绝对值的二进制形式。
  3. 零的原码:符号位可以是0(表示+0)或1(表示-0),但在实际应用中,通常只使用一个零,即符号位为0。

举例(以8位二进制数为例):

  • +5 的原码是:00000101
  • -5 的原码是:10000101

原码的缺点

  • 存在正零和负零的表示。
  • 在进行算术运算时,正数和负数需要不同的处理,这使得硬件设计变得复杂。

由于上述的缺点,原码并不是计算机中最常用的表示法。在现代计算机中,补码是更常用的方式来表示有符号整数,因为它简化了算术运算的处理,并且没有+0和-0的冗余表示。

补码

补码(Two’s complement)是计算机科学中用于表示整数的一种方法,特别是在现代计算机的算术和逻辑操作中。使用补码可以使得加法、减法和负数的表示变得简单和统一。

表示方法

原码的表示方法:

  1. 正数的原码:最高位为0,其余位表示这个数的绝对值的二进制形式。
  2. 负数的原码:最高位为1,其余位表示这个数的绝对值的二进制形式。
  3. 零的原码:符号位可以是0(表示+0)或1(表示-0),但在实际应用中,通常只使用一个零,即符号位为0。

以8位二进制数为例:

  1. 对于正数,例如 +5,其二进制表示为 00000101,补码也是 00000101。
  2. 对于负数,例如 -5,首先写出5的二进制表示:00000101。
    • 按位取反得到:11111010
    • 加1得到:11111011
    • 所以,-5的补码是 11111011。

补码的计算方式

以8位补码为例讲解一下补码是如何从二进制位与实际数字结合的:

第7位第6位第5位第4位第3位第2位第1位第0位
$-2^7 = -128$$2^6 = 64$$2^5 = 32$$2^4 = 16$$2^3 = 8$$2^2 = 4$$2^1 = 2$$2^0 = 1$

例子:

  • 10000001对应的值为 $-128 + 1 = -127$
  • 10001001对应的值为 $-128 + 8 + 1 = -119$
  • 01000001对应的值为 $64 + 1 = 65$

为什么要使用补码

补码的设计使得负数的加法变得简单。当使用补码表示时,可以直接将两个数相加,即使其中一个数是负数,而不需要进行任何特殊处理。这简化了计算机硬件的设计。