zoukankan      html  css  js  c++  java
  • 详解二进制补码

    过去学计算机组成原理时一直没有搞明白补码的意义,今天听了王红老师的数字电子基础课才了解到,惭愧!

    数制和码制

    在正文开始之前,首先要明确两个概念,就是数制和码制,

    比如下面这个数字:

    100832
    

    他可能代表的是整型值十万零八百三十二,这就是数制;但如果它代表的是邮政编码,这就是码制;

    二进制补码

    带符号二进制的运算依赖于补码,如

    +5: 0 0101
    -5: 1 0101
    

    最高位为0则为正,为1则为负。正常来讲我们将其相加应该是0,但实际上:

      00101
     +10101
     ------
      11010
    

    直接相加得到的结果并不是我们想要的,这是因为哦这样想加混淆了数制和码制,最高位的0和1并不和地位一样代表着数值,所以和它们一起直接计算必然就会出错。

    所以带符号的二进制数的计算依赖于补码,补码的表示如下:

    +5: 0 0101
    -5: 1 1011
    

    这里有几个要解释和注意的点:

    • 补码和原码的转换规则:正数补码和原码相同,负数的补码为原码的数值位取反加一、符号位不变

    • 补码的计算:

      如-5的补码为 11011,即(-2^{4}+2^3+2^1+2^0=-16+8+2+1=-5),即符号位代表了一个很大的负数值,足以纠正数制位的正数值。从这里也能理解为什么n位二进制补码可以表达的范围为(-2^{n-1}...2^{n-1}-1)

    • 负数的补码需要添位时直接往高位添1即可

    • 符号位的处理:最终的符号位就是两者符号位相加再加上上来的进位

    • 考虑到结果的位数,要清楚的知道最后的范围是多少,否则就会出错。考虑5位补码运算13+10:

      0 1101
      0 1010
      -------
      1 0111=-7
      
  • 相关阅读:
    活着的目标
    Online Judge(OJ)搭建——2、数据库,SQL语句
    《Docker 实战》第三章 Docker Hub 寻宝游戏
    2017年计划
    IDEA 问题 & 解决
    IDEA 自动化配置
    bzoj 3796: Mushroom追妹纸【二分+后缀数组+st表】
    CF487E Tourists【圆方树+tarjan+multiset+树剖+线段树】
    bzoj 1023: [SHOI2008]cactus仙人掌图【tarjan+dp+单调队列】
    bzoj 4316: 小C的独立集【仙人掌dp】
  • 原文地址:https://www.cnblogs.com/chuaner/p/13343973.html
Copyright © 2011-2022 走看看