补码表示法(0,
-128详解)
阅读原文点击(csdn 博文)
关于计算机内部定点整数表示方法,有很多种文章都有总结,但是仍然不能很好地解决初学者的困惑,为此在这里用图表说明一下
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个。
补码表示法(0,
-128详解)
阅读原文点击(csdn 博文)
关于计算机内部定点整数表示方法,有很多种文章都有总结,但是仍然不能很好地解决初学者的困惑,为此在这里用图表说明一下
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个。