二进制的转换
二进制——> 十进制:
- 从右到左的第
N
位,乘上一个 2 的N
次方,然后加起来,就变成了一个十进制数 - 例如二进制数:0011,对应的十进制表示,就是 0 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 = 3 0×2^3+0×2^2+1×2^1+1×2^0=3 0×23+0×22+1×21+1×20=3,代表十进制的 3 3 3
十进制——> 二进制:
-
短除法
- 将十进制数除以2,并记录余数。
- 将商继续除以2,再次记录余数。
- 重复此过程,直到商为0为止。
- 将记录的余数按相反的顺序排列,即可得到对应的二进制数。
例如,将十进制数23转换为二进制:
- 23 ÷ 2 = 11 余 1
- 11 ÷ 2 = 5 余 1
- 5 ÷ 2 = 2 余 1
- 2 ÷ 2 = 1 余 0
- 1 ÷ 2 = 0 余 1
然后,将记录的余数按相反的顺序排列:10111
二进制的相加操作
二进制相加的规则如下:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 0 = 1
- 1 + 1 = 0,产生一个进位(carry)
例如:
1 0 1 1 (1011)
+ 0 1 0 1 (0101)
------------
1 1 0 0 (1100)
- 从最右边的位开始相加,根据规则,1 + 1 = 0,并且产生了一个进位。这个进位需要加到下一位的相加结果中。依次相加,最后得到结果1100。
- 如果相加的两个二进制数的位数不同,那么在相加之前需要对齐它们的位数。可以在较短的二进制数的左侧补零,使它们的位数相等,然后再进行相加操作
二进制的减法操作
减法运算步骤
- 二进制减法可以通过将减法转换为加法来完成,其中使用补码形式进行相加,并进行进位处理。
下面是二进制减法运算的步骤:
-
将减数转换为补码形式(如果减数为负数)。
- 如果减数为正数,无需转换。
- 如果减数为负数,需要将其转换为补码形式。转换方法是先取其绝对值的二进制表示形式,然后按位取反(0变为1,1变为0),最后加1。
-
使用补码形式的减数与被减数进行二进制相加。
- 采用与二进制加法相同的步骤,从最低位(最右边)开始逐位相加,并处理进位。
-
检查结果的最高位(最左边的位)确定其正负性。
- 如果最高位为1,表示结果为负数。
- 如果最高位为0,表示结果为正数。
-
如果结果为负数,将结果转换为正数形式。
- 将结果的补码形式的最高位取反(0变为1,1变为0)得到反码。
- 对反码加1得到正数形式。
-
最终结果即为减法的结果。
减法示例
假设我们要计算-5
加1
的结果:
-5 + 1 = ?
-
将
被减数(-5)
转换为补码形式:首先,取其反码:
1010
然后,将反码加1:
1011
所以,-5的补码为:
1011
-
1
的二进制表示为:0001
现在,我们将进行二进制的相加操作:
1011 (-5)
+ 0001 (+1)
----------
从最右边的位开始相加:
- 第一位(最低位):1 + 1 = 10。将0写在当前位上,并将1作为进位。
1011 (-5)
+ 0001 (+1)
----------
0
- 第二位:1(进位)+ 1 + 0 = 10。将0写在当前位上,并将1作为进位。
1011 (-5)
+ 0001 (+1)
----------
00
- 第三位:1(进位)+ 0 + 0 = 1。将1写在当前位上。
1011 (-5)
+ 0001 (+1)
----------
100
- 第四位:1 + 0 = 1。将1写在当前位上。
1011 (-5)
+ 0001 (+1)
----------
1100
- 最终结果的最高位为1,说明结果是负数,所以:1100是一个负数。
接下来,我们需要将结果转换为正数形式:
- 取补码的反码:
0011
。 - 将反码加1得到:
0100
。
最后得到:-5 + 1 = -4
。
参考文献
- 徐文浩. 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?极客时间. 2019