zoukankan      html  css  js  c++  java
  • 补码运算

      

    补码如何实现 由减到加: 

      首先,我想讲 一个故事:

           话说,战国时期 季梁遇到一个 赶着车向北走的人,于是季梁就问他,“你要去哪里啊?” 那人就说 "楚国"于是季梁又问,"可是

         楚国不是在南方吗?" 那人又说“没关系,我的马好。"

           其实,那人就给出了我们补码的思路,你要去南方,可以直接向南方去,也可以一路向北,绕地球一圈,从而到达楚国。

      补码也是这样 ,因为计算机的定长表示,所以补码的取值范围是有周期的 

        如 :[127]补=0111 1111 再加一的话,就是 0000 0000  零了

      为了便于理解可以用时钟计算(12小时制的)

      9要拨到5,可以减4,也可以加8 ,所以此时 -4和+8是等价的  。

      那么 ,我们可以认为 8是4的补码

      那么这两个数有什么联系呢? 没错他们和在一起就绕了时钟一圈,用数学表达的话就是 两数的相加的绝对值 为 12

      类比到补码  首先的明白一圈是多少 ?(这个我解释不了,是试出来的)一圈为128 ,

      于是用  128减真值 也就是所谓的 数值位取反,末位加一  的操作了。

      再回到时钟, 9-4=9+[4]补=(9+8)%12    因为他会多走一圈,所以我们再在这里还要 %12,而计算机补码是有周期的,不用这一步

      那么现在我们就可以推出   x-y=x+[y]补

     补码运算规则:

      加法规则:[x+y]补=[x]补+[y]补

      减法规则:[x-y]补=[x]补+[-y]补

      1,[-y]补为将[y]补 全部取反末位加1 得

      2,溢出:运算结果超出可表示范围

      3,溢出的判断:最高两位向上进/借位不同则该运算溢出

      4,补码求原码:与原码求补码操作一样 ,a-b=c,则a-c=b  ,另外也可以逆推 -1再取反

           

  • 相关阅读:
    用 VMControl 管理 IBM i,第 1 部分: VMControl 简介
    使用 VMControl 2.4 实现多网络的 Power 服务器捕捉和系统部署
    lftp 4.4.0 发布,命令行的FTP工具
    Percona Toolkit 2.1.4 发布
    RabbitMQ 2.8.7 发布,AMQP 消息队列
    编程获取本机IPv4及IPv6地址
    Mac下android环境搭建
    Python 3.3.0 RC3 发布
    Sean Lynch谈Facebook Claspin监控工具的由来
    .NET开发者可以在Windows 8中使用ARM
  • 原文地址:https://www.cnblogs.com/asdfknjhu/p/12083172.html
Copyright © 2011-2022 走看看