• 原码 反码 补码


      今天的计算机组成原理讲的这些知识,感觉以前知道的很是不透彻啊,把我弄的晕的,这里来解释一下。

      首先这些码制都是为了解决有符号数来设定的规则。假设有n位,其中1位为符号位,你可以表示的原码范围为:-(2^(n-1)-1)到2^(n-1)-1,也就是说,假如你有8位,可以表示的有-127到+127,所以要想表示-128,必须需要9位,即110000000,要想表示128,结果是010000000;此为还需要注意的是,+0和-0并不一样,假如有八位,那么+0的原码为00000000,-0的原码为10000000;

      假设有n位,其中1位为符号位,补码表示的范围为 -2^(n-1)到2^(n-1)-1也就是说,假如你有8位,可以表示的有-128到+127,所以要想表示128,必须要9位,即010000000,必须要注意的是-128的补码只需8位即可,即10000000(这个10000000是怎么算出来的呢?我来教你,既然8位就可以表示-128,那即是求-10000000的补码,将10000000取反就是01111111,再加1就是10000000了。);此外还要注意的,在补码中0只有一种表示,假设还在8位的情况下,补码为00000000。

      假设有n位,其中1位为符号位,反码表示的范围-(2^(n-1)-1)到2^(n-1)-1也就是说,假如你有8位,可以表示的有-127到+127,所以要表示-128,就得用9位,即-128的反码为101111111,要表示128的话,也需要9位,即010000000;此外还要注意的是-0和+0的反码不一样,+0的8位二进制反码为00000000,-0的8位二进制反码为11111111

      最后解决一个问题,为什么8位的反码、原码、补码表示的范围不一样呢??注意到8位中如果有一位表示符号位,那么表示的范围将是+0到+127,-0到-127,只是+0和-0的补码是一样的,多了一个-128。

      以上理解可能还有一些不太合适的地方,欢迎大家指正。

                                                                      

  • 相关阅读:
    spring读取配置文件内容并自动注入
    xshell免费下载安装使用
    cas sso原理
    sql两列相除,保留n位小数
    mysql 报zone什么的错误
    mysql union出错: "Every derived table must have its own alias"
    mysql jdbc操作
    sql 对某列取值进行if判断
    Python深入:02浅拷贝深拷贝
    Python基础:22__slots__类属性
  • 原文地址:https://www.cnblogs.com/wangaohui/p/2750527.html
Copyright © 2020-2023  润新知