您的位置:首页 > 其它

补码表示法(0,-128详解)

2013-08-03 14:04 260 查看
关于计算机内部定点整数表示方法,有很多种文章都有总结,但是仍然不能很好地解决初学者的困惑,为此在这里用图表说明一下

1、这里以8个二进制位为例,实际上计算机内部有16位(2字节)、32位(4字节)等数据类型。

2、还有定点整数在计算机中都是以补码形式表示的(正整数原码、反码和补码相等,负整数用补码表示),这里为 了说明原码、补码、反码的相互之间的关系而假设计算机内部采用了原码、反码表示,实际上这是不存在的。

下面我们来看一下表格吧:



看完这个表格相信大家对这些补码、反码、原码不在迷惑了吧。让我们来看一下值得注意的几个问题:

1、这里我们先不管数据的实际大小,反正在这八个二进制位都是写进去0或1,于是这八个二进制位共有2^8=256个 排列组合,所以最多能表示256个数据,至于怎么表示,这就是补码、反码、原码研究的问题了,注意表格中的二 进制数是按顺序从00000000到11111111渐变的这就涵盖了所有的256中组合,下面让我们具体分析下:

2、当二进制数的d7位为0时,把这些数据还原成十进制会发现,无论把这些二进制数据看成补码、原码或反码结果都 是一样的,这正是因为正整数的原码、补码和反码相同的体现,大家还发现了一个问题,为什么表格的B、C列表 示0时用+0,呢?先放下这个问题,我们向下看。

3、当渐变到10000000时我们发现数据发生了突变而且表格后面三列的数据也不相同了,这是因为高位是1无论在原 码、反码还是补码中都表示负数,而负数的原码、反码、补码是各不相同的。

4、继续向下看数据都是渐变的了不同的是A列是从-128 ~ -1,B列从-0 ~ -127,C列是从-127 ~ -0,从中我们不难 发现A列即补码表示的范围中没有+0,-0之说,而原码、反码中则区分开了-0和+0,显然浪费掉一个存储数据的情 况,A列保存的数据是-128 ~ 127共256个,B、C列保存的-127
~ 127外加一个重复的情况共256个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: