一日一技:二进制减法是如何进行的

简介: 一日一技:二进制减法是如何进行的

在计算机中,负数是使用它的补码来表示的。所谓补码,就是反码+1。所谓反码,就是二进制数逐位取反。所谓逐位取反,就是1变成0,0变成1。例如:

原来的二进制数: 1011011101101反码: 0100100010010补码: 0100100010011

在数学里面,当我们判断一个正数和负数的时候,是通过这个数字前面的负号来判断的,例如: 5-5。但是由于计算机里面只有0和1,如何表示负号呢?因此可以使用一个额外的1来表示。例如:

正数: 0101负数: 1101

其中最左边的0和1表示的是符号位,0为正数,1为负数。

如果到这里,你以为你看懂了,那么我问你一个问题,下面几个数有什么区别:

0101
00101
000101
0000101
00000101

下面几个数有什么区别:

1101
10101
100101
1000101
10000101

实际上,他们表示的是不同位数条件下的同一个数。因为在计算机中,你定义一个数字的时候,是需要先提前指定这个数的类型的。例如int型、long型等等。(即便你用的Python,不需要人工指定,但是在底层它也会自动指定)。所以,如果我直接说:数字5在计算机中是怎么储存的,是没有意义的。应该说,数字5在8位整型下面是怎么储存的、在32位整型下面是怎么储存的:

00000101   # 8位整型
00000000000000000000000000000101  # 32位整型

所以,对于-5,在8位整型和32位整型下面,他们是这样储存的:

10000101   # 8位整型
10000000000000000000000000000101  # 32位整型

在计算机中,一个正数的补码就是它自身,例如 00000101的补码还是 00000101,而负数的补码,就需要根据补码的规则进行计算,例如在8位整型下,-5的补码运算规则如下:

  1. 首先计算正5的二进制数:00000101
  2. 逐位取反:11111010
  3. 加1:1111011

接下来,例如我们在8位整型下,计算9-5的值,那么在计算机中,运算过程为:

  1. 求9的二进制补码(正数的补码就是它自身):00001001
  2. 求5的二进制补码:11111011
  3. 两个补码相加:100000100
  4. 由于我们是在8位整型的环境下,所以最左边这个1被直接丢掉了(溢出),结果变成:00000100
  5. 对结果再求补码。由于结果00000100最左边是0,表示正数,所以补码是自身。因此二进制数00000100对应的十进制数为4,就是正确结果。

再来看看8位整型条件下:10 - 13 = -3的过程:

  1. 计算10的二进制数补码:00001010
  2. -13的二进制补码:11110011
  3. 两个补码相加:11111101
  4. 对结果求补码,由于最左边这一位是1,表示负数,所以要把十进制负数转二进制补码的过程反过来
  5. 先转成十进制正数对应的二进制数:00000011为3
  6. 把负号加上:-3,答案正确

这里需要说明的是,在计算机中做二进制数运算时,一定要明确是在多少位的整型前提下进行的,这样才能够正确处理位数溢出的问题。

由于位数溢出,在计算机中才会出现两个正数相加,结果却是负数的情况。例如:

127 + 1,在数学上结果为128,但是在计算机中,8位整型的情况下,结果为-128。原因如下:

  1. 计算127对应的二进制补码:01111111
  2. 计算1对应的二进制补码:00000001
  3. 两个补码相加:10000000
  4. 由于结果的最左侧为1,表示负数,因此要把十进制负数转二进制补码的过程反过来
  5. 先转成十进制正数对应的二进制补码:10000000(没错,10000000的补码恰好还是10000000)也就是128
  6. 加上负号:-128
目录
相关文章
|
6天前
X 进制减法问题
X 进制减法问题
11 0
|
7月前
|
数据处理
二进制算术运算的介绍
二进制算术运算 引言: 二进制算术运算是计算机科学中的重要概念,它是计算机内部运算的基础。本文将介绍二进制算术运算的基本概念和常见的运算符,以及如何进行二进制数的加法、减法、乘法和除法运算。 一、二进制算术运算的基本概念 二进制数是由0和1组成的数,它是计算机中表示数据的基本形式。在二进制算术运算中,我们使用了一些基本的运算符,包括加法、减法、乘法和除法。这些运算符在二进制数中的运算规则与十进制数中的运算规则类似,但是需要注意的是,二进制数中没有负数的概念,所以减法运算需要借位。 二、二进制数的加法运算 二进制数的加法运算与十进制数的加法运算类似,只需要按照从右到左的顺序逐位相加,并考虑
77 1
|
10月前
|
算法
二进制浮点数的加减法运算
二进制浮点数的加减法运算
二进制加法
二进制加法:目标只使用位运算符来实现,还有缺陷,留待后续解决
48 0
二进制数的补码及运算(2)
二进制数的补码及运算(2)
141 0
二进制数的补码及运算(2)
二进制数的补码及运算(1)
二进制数的补码及运算(1)
197 0
|
存储
5.3.2_原补码的除法运算
计算机组成原理之原补码的除法运算
229 0
5.3.2_原补码的除法运算
|
算法 C语言
5.1.3_无符号整数的表示和运算
计算机组成原理之无符号整数的表示和运算
555 0
5.1.3_无符号整数的表示和运算