原码 反码 补码

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

  首先这些码制都是为了解决有符号数来设定的规则。假设有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。

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

                                                                  

原文地址:https://www.cnblogs.com/wangaohui/p/2750527.html