解决原码,反码,补码,二进制加减的全部疑问(

您所在的位置:网站首页 二进制怎么变补码 解决原码,反码,补码,二进制加减的全部疑问(

解决原码,反码,补码,二进制加减的全部疑问(

2024-05-30 06:14| 来源: 网络整理| 查看: 265

这个是我最初写的文章,但标题不明显,根本没人看。所以我要做个标题党~~

现在新建一篇文章,专门解决这些疑问,内容详细到令人发指!

你可以对照目录,一步一步阅读,甚至动手计算和画图,带你彻底搞懂各种码的问题!

如果有错误的知识点,请评论指正!

下面正文:

计算机处理数据方式与人类有很大的不同。计算机的计算方式和人类做计算的方式是完全不一样的,计算机有自己的处理方式,计算机用二进制,能把数据运算的又快又准确,因此我们需要尊重计算机,要以计算机的思维方式,去处理和计算数据,而不是用人类的思维!

如何实现加减法人类加法

人类在计算数字的时候,是非常容易的,例如:

123 + 108 = 231

因为我们知道需要每一位进行相加,如果产生进位就往前一位加1,最终得到231的结果

人类减法 229 - 134 = 095

我们也会减法,每个位进行相减,如果不够数,就向前一位借1,最终得到95的结果

如果前一位也不能借位了,那就增加负号,表示数不够了

而计算机的加减法在这一点上的机制是一样的,只是形式转化为二进制了而已

计算机加法 1010 + 0010 = 1100

计算机加法也是0+1=1,1+0=1,0+0=0,1+1 = 0(进位1)

计算机减法 1101 - 0110 = 0111

计算机减法也是1-1=0,1-0 = 1,0-0=0,0-1 = 1(借位1,没得借就是-1)

计算机加减法的实现最后还是得依靠物理的电路,也就是我们第一层抽象的逻辑门来实现的,并且加法的运算规则:0+1=1,1+0=1,0+0=0,1+1 = 0(进位1),是可以通过布尔代数,逻辑,逻辑门来表达和实现的

逻辑门实现请看:

(半加器与全加器中会详细介绍:计算机的物理电路是如何实现加法的)

也就是说:计算机可以很容易地通过电路实现加法,但是却没有办法计算减法。它没办法计算向前借一位的操作,也没办法计算向前进一位的操作!甚至如何标记这个数是正数还是负数都困难,因为计算机不认识人类的[ + ] 和[ - ]符号,它只知道0和1的符号。

问题1

如何解决计算机二进制数表达正数还是负数的问题?

此时我们需要解决:如何在二进制数据中区分正数和负数?如果是你来解决这个问题,你会怎么设计?

原码

对于人类来说,区分正数和负数通过符号 [ + ] 和 符号 [ - ] 来区分

对于二进制数来说,计算机也需要有个标记来区分正数还是负数

把二进制的首位当作标记符,[ 0 ]表示正数,[ 1 ]表示负数

正数1的原码为: 0 0000001 负数-1的原码为:1 0000001

完美解决二进制表示正负数的问题,不需要用到符号 [ + ] 和 符号 [ - ]

唯一的缺点就是第一位不能用来存储值了,因为第一位被占用作为正负的标记位

让我们来计算一下1+2=3

0 0000001 原 + 0 0000010 原 = 0 0000011 原

得到十进制:3,结果正确,非常好!

问题2

如何让计算机二进制数进行加法和减法?

此时我们需要解决:我们知道物理电路的规则,有且只有4种:0+1=1,1+0=1,0+0=0,1+1 = 0

请问如何让计算机根据以上4种物理电路进行加法和减法?

反码

对于人类来说,做加法【3 + 5】 和做减法 【3 – 5】是非常容易的

但根据前面说的:计算机只会加法,我们该如何把减法转换为加法?

把减法变为加法是小学的知识:3 - 5 = 3 + (-5)

让符号位参与运算,说不定可以完美解决计算机只会加法的问题!

计算一下:3 + (-5) = -2

0 0000011 原 + 1 0000101 原 = 1 0001000 原

得到十进制:-8,结果错误,出问题了~

看来直接用原码进行加法是不行的,因为原码的符号位参与了运算

此时Niubility的数学家规定:用反码进行计算

正数的反码为本身

负数的反码为除



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3