二进制数表示

我们可以将二进制数分为以下两组:无符号数有符号数

无符号数

无符号数仅包含数字的大小。它们没有任何符号。这意味着所有无符号二进制数都是正数。与十进制数一样,在数字前面放置正号是可选的,以表示正数。因此,如果数字前面没有分配正号,则所有正数(包括零)都可以视为无符号数。

有符号数

有符号数包含数字的符号和大小。通常,符号放在数字前面。因此,我们必须考虑正数的正号和负数的负号。因此,如果在数字前面分配了相应的符号,则所有数字都可以视为有符号数字。

如果符号位为零,则表示二进制数为正。同样,如果符号位为 1,则表示二进制数为负。

无符号二进制数的表示

无符号二进制数中的位保存数字的幅度。这意味着,如果无符号二进制数包含'N'位,则所有N位都表示数字的幅度,因为它没有任何符号位。

示例

考虑十进制数 108。该数字的二进制等价物是1101100。这是无符号二进制数的表示形式。

(108)10 = (1101100)2

它有 7 位。这 7 位表示数字 108 的大小。

有符号二进制数的表示形式

有符号二进制数的最高有效位 (MSB) 用于指示数字的符号。因此,它也被称为符号位。正号通过在符号位中放置"0"来表示。类似地,负号通过在符号位中放置"1"来表示。

如果有符号的二进制数包含"N"位,则(N-1)位仅表示数字的大小,因为一位(MSB)保留用于表示数字的符号。

有符号二进制数有三种表示类型

  • 符号-大小形式
  • 1 的补码形式
  • 2 的补码形式

这 3 种形式中正数的表示都是相同的。但是,只有负数的表示在每种形式中会有所不同。

示例

考虑正十进制数 +108。该数字的幅度的二进制等价物是 1101100。这 7 位表示数字 108 的幅度。由于它是正数,因此将符号位视为零,它位于幅度的最左侧。

(+108)10 = (01101100)2

因此,正十进制数 +108 的有符号二进制表示为 𝟎𝟏𝟎𝟏𝟏𝟎𝟎。因此,对于正十进制数 +108,相同的表示法在符号-数值形式、1 的补码形式和 2 的补码形式中均有效。

符号-数值形式

在符号-数值形式中,MSB 用于表示数字的符号,其余位表示数字的数值。因此,只需在无符号二进制数的最左侧包含符号位。此表示法类似于有符号十进制数的表示法。

示例

考虑负十进制数 -108。这个数字的数值是 108。我们知道 108 的无符号二进制表示法是 1101100。它有 7 位。所有这些位都代表了数值。

由于给定的数字是负数,因此将符号位视为 1,它位于数值的最左侧。

(−108)10 = (11101100)2

因此,-108 的符号数值表示为 11101100

1 的补码形式

数字的 1 的补码是通过 对有符号二进制数的所有位进行补码 获得的。因此,正数的 1 的补码给出的是负数。类似地,负数的 1 的补码会得出一个正数。

这意味着,如果对包含符号位的二进制数执行两次 1 的补码,那么您将得到原始的带符号二进制数。

示例

考虑负十进制数 -108。这个数字的大小是 108。我们知道 108 的带符号二进制表示是 01101100。

它有 8 位。这个数字的 MSB 为零,表示正数。零的补码为一,反之亦然。因此,用 1 替换 0,用 0 替换 1,即可得到负数。

(−108)10 = (10010011)2

因此,(108)10 的 1 的补码为 (10010011)2

2 的补码形式

二进制数的 2 的补码是通过 将 1 加到有符号二进制数的 1 的补码 得到的。因此,正数的 2 的补码给出的是负数。类似地,负数的 2 的补码会得出一个正数。

这意味着,如果对包含符号位的二进制数执行两次 2 的补码,那么您将得到原始的有符号二进制数。

示例

考虑负十进制数 -108

我们知道 (108)10 的 1 的补码是 (10010011)2

(108)10 的 2 的补码 = (108)10 的 1 的补码 + 1。

= 10010011 + 1

= 10010100

因此,(108)10 的 2 的补数为 (10010100)2