数字电子技术 - 补码运算



补码运算是在数字电子技术领域使用的一套数学技术,主要用于执行各种算术运算,特别是减法。

在这里,我们将介绍数字系统中最常用的几种补码类型:

  • 9的补码
  • 10的补码
  • 1的补码
  • 2的补码
  • 7的补码
  • 8的补码
  • 15的补码
  • 16的补码

让我们详细讨论这些补码及其在算术运算中的应用。

什么是9的补码?

在数字电子技术中,9的补码是一种用于在数字系统中执行十进制数减法的补码。因此,9的补码与十进制数系统相关。

  • 9的补码用于执行减法,因为它简化了减法运算。
  • 给定十进制数的9的补码是通过从该数的每一位数字中减去9来找到的。

下表显示了每个十进制数字的9的补码:

十进制数字 9的补码
0 9 – 0 = 9
1 9 – 1 = 8
2 9 – 2 = 7
3 9 – 3 = 6
4 9 – 4 = 5
5 9 – 5 = 4
6 9 – 6 = 3
7 9 – 7 = 2
8 9 – 8 = 1
9 9 – 9 = 0

让我们通过例子来理解它。

例1

求十进制数7824.450的9的补码。

解答

以下是求给定十进制数的9的补码的分步过程:

  • 7的9的补码 = 9 – 7 = 2
  • 8的9的补码 = 9 – 8 = 1
  • 2的9的补码 = 9 – 2 = 7
  • 4的9的补码 = 9 – 4 = 5
  • 4的9的补码 = 9 – 4 = 5
  • 4的9的补码 = 9 – 4 = 5
  • 0的9的补码 = 9 – 0 = 9

因此,十进制数7824.450的9的补码是2175.549。

例2

求45608的9的补码。

解答

十进制数45608的9的补码如下:

  • 4的9的补码 = 9 – 4 = 5。
  • 5的9的补码 = 9 – 5 = 4。
  • 6的9的补码 = 9 – 6 = 3。
  • 0的9的补码 = 9 – 0 = 9。
  • 8的9的补码 = 9 – 8 = 1。

因此,45608的9的补码是54391。

什么是10的补码?

在数字电子技术中,10的补码是另一种用于执行十进制数减法的补码。同样,10的补码的目的是简化十进制减法运算。

有两种方法可以找到十进制数的10的补码:

方法一 - 要找到给定十进制数的10的补码,首先我们通过从该数的每一位数字中减去9来找到9的补码。然后,我们将1加到9的补码上以获得10的补码,即:

10的补码 = 9的补码 + 1

使用此方法,每个十进制数字的10的补码在下面的表格中给出:

十进制数字 9的补码
0 9 – 0 = 9 + 1 = 10 = 0(忽略进位)
1 9 – 1 = 8 + 1 = 9
2 9 – 2 = 7 + 1 = 8
3 9 – 3 = 6 + 1 = 7
4 9 – 4 = 5 + 1 = 6
5 9 – 5 = 4 + 1 = 5
6 9 – 6 = 3 + 1 = 4
7 9 – 7 = 2 + 1 = 3
8 9 – 8 = 1 + 1 = 2
9 9 – 9 = 0 + 1 = 1

方法二 - 在这种方法中,我们可以使用以下公式来找到给定十进制数的10的补码:

10的补码 = 10N – 数

其中,N是十进制数的位数。

让我们通过例子来理解寻找10的补码的过程。

例1

求十进制数4872的10的补码。

解答

4872的10的补码可以确定如下:

求4872的9的补码:

9999 – 4872 = 5127

将1加到9的补码上以获得10的补码:

5127 + 1 = 5128

5127 + 1 = 5128

例2

所以,4872的10的补码是5128。

解答

求2478.98的10的补码。

2478.98的10的补码可以如下找到:

求2478.98的9的补码:

将1加到9的补码上以获得10的补码:

7521.01 + 1 = 7521.02

9999.99 – 2478.98 = 7521.01

然后,10的补码为:

7521.01 + 1 = 7521.02

解答

因此,7521.01的10的补码是7521.02。

例3

求58942的10的补码。

58942的10的补码如下:

58942的10的补码 = 105 – 58942

58942的10的补码 = 100000 – 58942 = 41058

因此,58942的10的补码是41058。

什么是1的补码?

在数字电子技术中,1的补码是一种用于简化二进制数减法的补码。此外,1的补码还用于表示给定二进制数的负数。

我们可以通过将数字中的所有0更改为1,并将所有1更改为0来找到二进制数的1的补码。

例1

我们还可以通过从1中减去数字的每一位来找到二进制数的1的补码。

解答

但是,1的补码存在一个主要问题,即它对0有两种表示。其中,00000000表示正零,其1的补码是11111111,表示0,但这称为负零。

让我们考虑一些例子来理解寻找二进制数的1的补码的过程。

  • 求101101的1的补码。
  • 101101的1的补码可以如下获得:
  • 求101101的1的补码。
  • 求101101的1的补码。
  • 101101的1的补码可以如下获得:
  • 求101101的1的补码。

方法一 - 反转每一位:

1的1的补码 = 0

0的1的补码 = 1

例2

因此,101101的1的补码是010010。

解答

方法二 - 从1中减去每一位:

111111 – 101101 = 010010

因此,101101的1的补码是010010。

求101101101的1的补码。

给定二进制数的1的补码为:

1的补码 = 111111111 – 101101101 = 010010010

方法一 − 求取反码再加 1,即:

二进制补码 = 反码 + 1

方法二 − 从 2N 中减去给定的二进制数,即:

二进制补码 = 2N – 数值

其中,“N”是数字的位数。

方法三 − 从最低有效位 (LSB) 开始,复制到遇到的第一个 1 位(包含该位),然后对剩余位取反。

让我们通过示例了解求二进制数的二进制补码的过程。

例1

求 1100111 的二进制补码。

解答

我们可以按如下方式求 1100111 的二进制补码:

方法一 − 使用反码:

1100111 的反码 = 0011000

将 1 加到反码上得到二进制补码:

0011000 + 1 = 0011001

方法二 − 使用二进制补码公式:

二进制补码 = 27 – 1100111 = 128 – 1100111

二进制补码 = 10000000 – 1100111 = 0011001

方法三 − 从 LSB 开始复制位到第一个 1 位:

2's Complement Arithmetic

例2

求 11001100 的二进制补码。

解答

11001100 的二进制补码可以按如下方式获得:

方法一 − 使用反码:

11001100 的反码 = 00110011

二进制补码 = 反码 + 1

二进制补码 = 00110011 + 1

因此,

二进制补码 = 00110100

方法二 − 从 2N 中减去该数:

二进制补码 = 28 - 11001100

二进制补码 = 100000000 – 11001100 = 00110100

方法三 − 复制到第一个 1 位的位:

2's Complement Arithmetic Subtracting

什么是七进制补码?

在数字电子学中,七进制补码是一个用于简化八进制减法的概念。给定八进制数的七进制补码可以通过从该数的每一位上减去 7 来获得。

下表列出了每个八进制位的七进制补码:

八进制位 7的补码
0 7 – 0 = 7
1 7 – 1 = 6
2 7 – 2 = 5
3 7 – 3 = 4
4 7 – 4 = 3
5 7 – 5 = 2
6 7 – 6 = 1
7 7 – 7 = 0

让我们考虑一些例子来理解求八进制数的七进制补码的过程。

例1

求八进制数 3152 的七进制补码。

解答

3152 的七进制补码可以按如下方式获得:

  • 3 的七进制补码 = 7 – 3 = 4。
  • 1 的七进制补码 = 7 – 1 = 6。
  • 5 的七进制补码 = 7 – 5 = 2。
  • 2 的七进制补码 = 7 – 2 = 5。

因此,3152 的七进制补码是 4625。

例2

求八进制数 427102 的七进制补码。

解答

给定数字的七进制补码确定如下:

777777 – 427102 = 350675

因此,427102 的七进制补码是 350675。

什么是八进制补码?

八进制补码是另一种用于简化八进制减法的补码概念。实际上,它类似于十进制数系统中的十进制补码。

我们可以按如下方式求给定八进制数的八进制补码:

  • 通过从 7 中减去该数的每一位来求给定八进制数的七进制补码。
  • 将 1 加到七进制补码上。
  • 结果将是给定八进制数的八进制补码。

因此,

八进制补码 = 七进制补码 + 1

下表显示了每个八进制位的八进制补码:

八进制位 8的补码
0 7 – 0 = 7 + 1 = 10 = 0(忽略进位)
1 7 – 1 = 6 + 1 = 7
2 7 – 2 = 5 + 1 = 6
3 7 – 3 = 4 + 1 = 5
4 7 – 4 = 3 + 1 = 4
5 7 – 5 = 2 + 1 = 3
6 7 – 6 = 1 + 1 = 2
7 7 – 7 = 0 + 1 = 1

让我们通过示例了解求八进制补码的过程。

例1

求 4257 的八进制补码。

解答

4257 的八进制补码可以按如下方式求得:

4257 的七进制补码 = 7777 – 4257 = 3520

八进制补码 = 七进制补码 + 1

八进制补码 = 3520 + 1 = 3521

因此,4257 的八进制补码是 3521。

例2

求 77201 的八进制补码。

解答

给定八进制数的八进制补码可以按如下方式确定:

77201 的七进制补码 = 77777 – 77201 = 00576

八进制补码 = 七进制补码 + 1

八进制补码 = 00576 + 1 = 00577

因此,77201 的八进制补码是 00577。

什么是十五进制补码?

在十六进制数系统中,十五进制补码是一种用于简化十六进制数减法运算的补码概念。十五进制补码类似于十进制数系统中的九进制补码。

要找到给定十六进制数的十五进制补码,我们将该数的每一位从 15 (F) 中减去。

下表列出了每个十六进制位的十五进制补码:

十六进制位 15的补码
0 F – 0 = F
1 F – 1 = E
2 F – 2 = D
3 F – 3 = C
4 F – 4 = B
5 F – 5 = A
6 F – 6 = 9
7 F – 7 = 8
8 F – 8 = 7
9 F – 9 = 6
A F – A = 5
B F – B = 4
C F – C = 3
D F – D = 2
E F – E = 1
F F – F = 0

以下示例演示了求十六进制数的十五进制补码的过程。

例1

求十六进制数 A259C 的十五进制补码。

解答

A259C 的十五进制补码可以按如下方式获得:

  • A 的十五进制补码 = F – A = 5。
  • 2 的十五进制补码 = F – 2 = D。
  • 5 的十五进制补码 = F – 5 = A。
  • 9 的十五进制补码 = F – 9 = 6。
  • C 的十五进制补码 = F – C = 3。

因此,A259C 的十五进制补码是 5DA63。

例2

求 1BCFA 的十五进制补码。

解答

给定十六进制数的十五进制补码为:

FFFFF – 1BCFA = E4305

因此,十六进制数 1BCFA 的十五进制补码是 E4305。

什么是十六进制补码?

在十六进制算术中,我们还可以确定给定十六进制数的十六进制补码。十六进制补码是一个用于简化十六进制数减法运算的概念。

我们可以按如下所述确定给定十六进制数的十六进制补码:

  • 求给定十六进制数的十五进制补码。
  • 将 1 加到获得的十五进制补码上。这将给出十六进制数的十六进制补码。

因此,

十六进制补码 = 十五进制补码 + 1

下表列出了每个十六进制位的十六进制补码:

十六进制位 15的补码
0 F – 0 = F + 1 = 10 = 0(忽略进位)
1 F – 1 = E + 1 = F
2 F – 2 = D + 1 = E
3 F – 3 = C + 1 = D
4 F – 4 = B + 1 = C
5 F – 5 = A + 1 = B
6 F – 6 = 9 + 1 = A
7 F – 7 = 8 + 1 = 9
8 F – 8 = 7 + 1 = 8
9 F – 9 = 6 + 1 = 7
A F – A = 5 + 1 = 6
B F – B = 4 + 1 = 5
C F – C = 3 + 1 = 4
D F – D = 2 + 1 = 3
E F – E = 1 + 1 = 2
F F – F = 0 + 1 = 1

让我们举一些例子来理解求十六进制数的十六进制补码的过程。

例1

求 1ABDF7 的十六进制补码。

解答

给定十六进制数的十六进制补码可以按如下方式确定:

1ABDF7 的十五进制补码 = FFFFFF – 1ABDF7 = E54208

十六进制补码 = 十五进制补码 + 1

十六进制补码 = E54208 + 1 = E54209

因此,1ABDF7 的十六进制补码是 E54209。

例2

求 ABC 的十六进制补码。

解答

ABC 的十六进制补码为:

ABC 的十五进制补码 = FFF – ABC = 543

十六进制补码 = 十五进制补码 + 1

十六进制补码 = 543 + 1 = 544

因此,ABC 的十六进制补码是 544。

这就是数字电子学中使用的各种补码的全部内容。

现在,让我们看看它们在执行减法运算中的应用。

使用九进制补码进行减法

九进制补码可用于执行十进制数的减法。在这种方法中,两个十进制数的差值是通过将减数的九进制补码加到被减数中获得的。

让我们通过一个例子来了解使用九进制补码进行减法。

例1

从 (729)10 中减去 (517)10

解答

在这个例子中,我们有:

被减数 = 729

减数 = 517

求 517 的九进制补码,我们得到

999 – 517 = 482

现在,将 729 和 482 相加以获得 729 和 517 的差值,我们得到:

729 + 482 = 1211

存在一个首位进位,表明结果为正数,通过将首位进位加到中间结果的最低有效位来获得最终结果,即:

211 + 1 = 212

因此,729 和 517 的差值为 212。

例2

使用九进制补码方法从 (159)10 中减去 (203)10

解答

在这个例子中,

被减数 = 159

减数 = 203

取 203 的九进制补码,我们得到:

999 – 203 = 796

159 + 796 = 955

159 + 796 = 955

没有首位进位。因此,最终结果为负数,通过取 955 的九进制补码来获得,即:

999 – 955 = 44

因此,159 – 203 = –44。

使用10的补码进行减法

我们也可以使用10的补码进行十进制减法。下面给出使用10的补码进行十进制减法的步骤:

  • 步骤1 − 考虑十进制减法 X – Y。其中,X是被减数,Y是减数。
  • 步骤2 − 求Y的10的补码。
  • 步骤3 − 将X和Y的10的补码相加。
  • 步骤4 − 如果存在环绕进位,则结果为正数,最终结果通过丢弃进位获得。如果没有环绕进位,则表示结果为负数,通过对中间结果取10的补码并在其前面加上负号来获得。

让我们通过例子来了解使用10的补码进行十进制减法。

例1

使用10的补码算术,从(875)10中减去(599)10

解答

在这个例子中,我们有:

被减数 = 875

减数 = 599

求599的10的补码,我们得到:

599的10的补码 = 9的补码 + 1

因此,

599的10的补码 = (999 – 599) + 1 = 401

将875和401相加,我们得到:

875 + 401 = 1276

存在环绕进位,表明结果为正数,并且通过丢弃进位获得。

因此,875和599的差是276。

例2

使用10的补码算术,从(279)10中减去(307)10

解答

我们有:

被减数 = 279

减数 = 307

取307的10的补码,我们得到:

307的10的补码 = (999 – 307) + 1 = 693

将279和693相加,我们得到:

279 + 693 = 972

没有环绕进位,表明结果为负数。最终结果通过取972的10的补码获得,即:

972的10的补码 = (999 - 972) + 1 = 28

因此,最终结果是–28。

使用1的补码进行减法

1的补码用于二进制减法运算。

两个二进制数(例如X和Y),即X – Y的减法,可以使用1的补码根据以下步骤执行:

  • 步骤1 − 求减数(Y)的1的补码。
  • 步骤2 − 将X和Y的1的补码相加。
  • 步骤3 − 如果存在环绕进位,则表示结果为正数,最终结果通过将环绕进位加到中间结果的最低有效位 (LSB) 来获得。如果没有环绕进位,则结果为负数,通过取中间结果的1的补码并在其前面加上负号来获得。

考虑以下示例,以了解使用1的补码算术进行二进制减法。

例1

使用1的补码,从(1011)2中减去(111)2

解答

在这个例子中,我们有:

被减数 = 1011

减数 = 0111

求减数的1的补码:

0111的1的补码 = 1000

将1011和1000相加,我们得到:

1011 + 1000 = 1 0011

存在环绕进位,表明结果为正数。最终结果通过将此环绕进位加到中间结果(0011)的LSB来获得,即:

0011 + 1 = 0100

因此,1011和111的二进制差是100。

例2

使用1的补码算术,从(111)2中减去(1100)2

解答

给出:

被减数 = 0111

减数 = 1100

求减数的1的补码:

1100的1的补码 = 0011

将0111和0011相加,我们得到:

0111 + 0011 = 1010

没有环绕进位,表明结果为负数,通过取1010的1的补码获得,即:

1010的1的补码 = 0101

因此,111和1100的二进制差是-101。

使用2的补码进行减法

2的补码也用于使用数字系统执行二进制减法运算。使用2的补码执行两个二进制数(例如X和Y),即(X – Y)的减法的步骤如下:

  • 步骤1 − 求减数(Y)的2的补码。
  • 步骤2 − 将X和Y的2的补码相加。
  • 步骤3 − 如果存在环绕进位,则表示结果为正数,最终结果通过忽略环绕进位获得。如果没有环绕进位,则结果为负数,通过取中间结果的2的补码并在其前面加上负号来获得。

让我们看一些例子来了解使用2的补码算术进行二进制减法。

例1

使用2的补码算术,从(1100)2中减去(101)2

解答

在这个例子中,给出:

被减数 = 1100

减数 = 0101

取减数的2的补码,我们得到:

0101的2的补码 = (1111 - 0101) + 1 = 1011

将1100和1011相加,我们得到:

1100 + 1011 = 1 0111

存在环绕进位,表明结果为正数,最终结果通过忽略此环绕进位获得。

因此,1100和101的二进制差是111。

例2

使用2的补码算术,从(0110)2中减去(1010)2

解答

给定的数字是:

被减数 = 0110

减数 = 1010

取减数的2的补码,我们得到:

1010的2的补码 = (1111 - 1010) + 1 = 0110

将被减数和减数的2的补码相加,我们得到:

0110 + 0110 = 1100

由于没有环绕进位,表明结果为负数。最终结果通过取中间结果的2的补码获得,即:

1100的2的补码 = (1111 - 1100) + 1 = 0100

因此,0110和1010的二进制差是-100。

使用7的补码进行减法

7的补码算术可用于执行八进制数的减法。以下是使用7的补码执行八进制减法的步骤。

如果我们要从X中减去八进制数Y,即X – Y,则

  • 步骤1 − 求减数(Y)的7的补码。
  • 步骤2 − 将X和Y的7的补码相加。
  • 步骤3 − 如果存在环绕进位,则表示结果为正数,最终结果通过将环绕进位加到中间结果来获得。如果没有环绕进位,则结果为负数,通过取中间结果的7的补码并在其前面加上负号来获得。

让我们了解使用7的补码算术进行八进制减法。

例1

使用7的补码算术,从(721)8中减去(540)8

解答

给定的数字是:

被减数 = 721

减数 = 540

取减数的7的补码:

540的7的补码 = 777 – 540 = 237

将7的补码和被减数相加,我们得到:

721 + 237 = 1 160

存在环绕进位,表明结果为正数,最终结果通过将此环绕进位加到中间结果来获得,即:

160 + 1 = 161

因此,721和540的八进制差是161。

例2

使用7的补码方法,从(121)8中减去(310)8

解答

在这个例子中,给定的数字是:

被减数 = 121

减数 = 310

取减数的7的补码,我们得到:

310的7的补码 = 777 – 310 = 467

将被减数和减数的7的补码相加,即:

121 + 467 = 610

由于没有环绕进位,表明结果为负数,通过取中间结果的7的补码获得,即:

610的7的补码 = 777 – 610 = 167

因此,121和310的八进制差是-167。

使用8的补码进行减法

8的补码是另一种用于执行八进制减法的技术。下面解释了使用8的补码执行八进制减法的步骤:

  • 步骤1 − 如果八进制减法定义为X – Y。则求减数(Y)的8的补码。
  • 步骤2 − 将X和Y的8的补码相加。
  • 步骤3 − 如果存在环绕进位,则表示结果为正数,最终结果通过忽略环绕进位获得。如果没有环绕进位,则结果为负数,通过取中间结果的8的补码并在其前面加上负号来获得。

让我们通过例子来了解使用8的补码方法进行八进制减法。

例1

使用8的补码算术,从(712)8中减去(103)8

解答

给出:

被减数 = 712

减数 = 103

求减数的8的补码,我们得到:

103的8的补码 = (777 - 103) + 1 = 675

将被减数和减数的8的补码相加,我们得到:

712 + 675 = 1607

存在环绕进位。最终结果通过忽略环绕进位获得。

因此,712和103的八进制差是607。

例2

使用8的补码方法,从(206)8中减去(471)8

解答

在这个例子中,我们有:

被减数 = 206

减数 = 471

求减数的8的补码:

471的8的补码 = (777 - 471) + 1 = 307

将被减数和减数的8的补码相加,我们得到:

206 + 307 = 515

由于没有环绕进位,因此最终结果为负数,通过取中间结果的8的补码获得,即:

515的8的补码 = (777 - 515) + 1 = 263

因此,206和471的八进制差是-263。

使用15的补码进行减法

15的补码用于执行十六进制数的减法。如果我们要从X中减去十六进制数Y,则我们遵循以下步骤:

  • 步骤1 − 求减数(Y)的15的补码。
  • 步骤2 − 将X和Y的15的补码相加。
  • 步骤 3 − 如果有首位进位(end-around carry),则结果为正数,最终结果通过将首位进位加到中间结果得到。如果没有首位进位,则结果为负数,通过取中间结果的15的补码并在其前面加上负号得到。

以下示例演示了使用15的补码进行十六进制减法的过程。

例1

使用15的补码算术,从(E57A)16中减去(1920)16

解答

给定的数字是:

被减数 = E57A

减数 = 1920

求减数的15的补码:

减数的15的补码 = FFFF – 1920 = E6DF

将被减数和减数的15的补码相加,得到:

E57A + E6DF = 1CC59

存在首位进位,表明结果为正数,通过将首位进位加到中间结果得到,即:

CC59 + 1 = CC5A

因此,E57A和1920的十六进制差为CC5A。

例2

使用15的补码算术,从(A209)16中减去(DC25)16

解答

给定的数字是:

被减数 = A209

减数 = DC25

求减数的15的补码:

DC25的15的补码 = FFFF – DC25 = 23DA

将被减数和减数的15的补码相加,得到:

A209 + 23DA = C5E3

由于没有首位进位,结果为负数,通过取中间结果的15的补码得到,即:

C5E3的15的补码 = FFFF – C5E3 = 3A1C

因此,A209和DC25的十六进制差为-3A1C。

使用16的补码进行减法

16的补码也用于进行十六进制减法。这里解释了使用16的补码进行十六进制减法的步骤:

  • 步骤 1 − 如果十六进制减法定义为 X – Y,则求减数 (Y) 的16的补码。
  • 步骤 2 − 将 X 和 Y 的16的补码相加。
  • 步骤 3 − 如果有首位进位,则表示结果为正数,最终结果通过忽略首位进位得到。如果没有首位进位,则结果为负数,通过取中间结果的16的补码并在其前面加上负号得到。

让我们看一些例子来理解使用16的补码进行十六进制减法。

例1

使用16的补码算术,从(F9D)16中减去(E7C)16

解答

给定的十六进制数为:

被减数 = F9D

减数 = E7C

取减数的16的补码,得到:

E7C的16的补码 = (FFF – E7C) + 1 = 184

将被减数和减数的16的补码相加,得到:

F9D + 184 = 1121

存在首位进位,表明结果为正数。最终结果通过忽略首位进位得到。

因此,F9D和E7C的十六进制差为121。

例2

使用16的补码方法,从(AC5)16中减去(FF2)16

解答

给定的数字是:

被减数 = AC5

减数 = FF2

取减数的16的补码,得到:

FF2的16的补码 = (FFF – FF2) + 1 = 00E

将被减数和减数的16的补码相加,得到:

AC5 + 00E = AD3

没有首位进位,表明结果为负数。最终结果通过取中间结果的16的补码得到,如下:

AD3的16的补码 = (FFF – AD3) + 1 = 52D

因此,AC5和FF2的十六进制差为-52D。

结论

总之,补码算术是数字电子学中用于简化减法运算的一种方法。本章解释了不同类型的补码及其在减法运算中的应用,并提供了已解决的示例。

广告