解决原码,反码,补码,二进制加减的全部疑问( |
您所在的位置:网站首页 › 二进制怎么变补码 › 解决原码,反码,补码,二进制加减的全部疑问( |
这个是我最初写的文章,但标题不明显,根本没人看。所以我要做个标题党~~ 现在新建一篇文章,专门解决这些疑问,内容详细到令人发指! 你可以对照目录,一步一步阅读,甚至动手计算和画图,带你彻底搞懂各种码的问题! 如果有错误的知识点,请评论指正! 下面正文: 计算机处理数据方式与人类有很大的不同。计算机的计算方式和人类做计算的方式是完全不一样的,计算机有自己的处理方式,计算机用二进制,能把数据运算的又快又准确,因此我们需要尊重计算机,要以计算机的思维方式,去处理和计算数据,而不是用人类的思维! 如何实现加减法人类加法人类在计算数字的时候,是非常容易的,例如: 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 |