原码反码补码

   253
-  176
—————
    77


从右边一列开始,首先6比3大,所以从5借1,这样子变成了13-6=7,5被借了1,变成4.
继续,4比7小,所以继续从2借1,14减7等于7.
2被借1后成为1,1减1变成0,最后的结果为77


被减数
-  减数
————
       差


假如减数是3位数:176,而三位数最大是999,这样子就不存在需要借位了。

 999               
-176
———
 823

如果是四位数的话,就用9999,五位数用99999去减。


  253
+823
_______
 1076

再加一个1,并且减去1000:

 1076
 +   1
-1000
_________
    77


原始题目是253-176+1000-1000
然后经过修改253 -176 +999+1-1000
再进行变换 253+(999-176)+1-1000

非常简单对吧?这样子虽然看起来绕了一圈,但是你发现不需要借位就可以实现减法了。


再来一个减法案例。
刚刚是256-176,被减数比减数大。
再次我们反过来:176-256

176-253=-77
176-253+1000-1000
176-253+999+1-1000
176+(999-253)+1-1000
176+746+1-1000
922+1-1000=923-1000=922-999=-77 (到了这一步,可看出结果是负数,故把两数位置交换,这样做减法时就不需要借位了)
100-10=99-9=98-8

 




253-176
1111 1101 - 1011 0000
1111 1101 - 1011 0000 + 1111 1111 -1111 1111
1111 1101 + (1111 1111 - 1011 0000) -1111 1111
1111 1101 + 0100 1111 -1111 1111
101001100 - 1111 1111
1 01001101 - 1 0000 0000  (全部加1)
=0100 1101


20-13
1 0100 +  0011 -1 0000


那如果是13-20呢?结果是负数,那么你可以把13-20理解成20-13
最后的结果加一个负号就可以了。
=-0111

 


但是我们都知道,虽然用数学表示,人类一样可以看懂 -0111 这是一个负的二进制数。
但是如果要用电路来表示的话,电路只能表示0和1。所以,必须只能通过0和1,来表示这个数到底是正数还是负数。
并且能够实现计算。

这些聪明的科学家就想到了一个办法。
比如现在有8个加法器串联成了一个8位的加法机。

举例现在要计算5+3
0000 0101
0000 0011
============
0000 1000

8个开关都没闭合表示 0000 0000  8个开关都闭合表示 1111 1111
对应的最小表示0,最大表示十进制 255。 所以8个开关一共可以代表256个数字。



分别设计了有符号位和无符号数两种计算规则。

当需要用到负数的时候,就按照有符号模式。
当只用到正数的时候,既可以使用有符号模式,也可以使用无符号模式。

 
5-3=5+(-3)
  0000 0101
  1111 1101
==========
1 0000 0010



-1-127=(-128)
-1+(-127)=
    -1的原码[1000 0001]
加上
-127的原码[1111 1111]
等于
    -1的补码[1111 1111]

-127的补码[1000 0001]
补码结果         
               [11000 0000]

所以说补码[1000 0000]代表-128


posted @ 2017-06-29 23:25  随意就好欧巴  阅读(380)  评论(0编辑  收藏  举报