计算机中 您所在的位置:网站首页 计算机存储数据中最小单位的二进制的 计算机中

计算机中

2024-07-08 20:01| 来源: 网络整理| 查看: 265

引子:

一直以来,我看计算机书籍上关于计算机内数据存放,如一个字节-128~127表示为10000000~01111111表示郁闷。

后来:

计算机电路只用开和关来表示,对于二进制的0和1,所以计算机只有用二进制

表示。然后计算机只有加法器,没有减法器所以计算机内减法只有转化为加法才能存储。

然后:

科学家根据时钟的特性:时钟上有1~12个刻度,比如下午14点对应的是刻度2点,傍晚19点对应的是刻度7点,把时钟的12看做一个模,对于大于12的点只需要减去12那么对应的就是当前的时针点数。

同理科学家将十进制的1~9比作时钟上的刻度,假设十进制3位数666在1~999顺时针雕刻的均匀刻度圆盘上对应的刻度数就是666,那么3位数字-333怎么在同一个圆盘上表示呢?

答案很简单,只需要在999刻度为起点逆时针数333个刻度,得到的666刻度就可以表示为-333在这个圆盘中的刻度了!

科学家将这种表示方法称为补码,就是用一个定值(模)来反映数据。正数直接在模中找到对应的数据,负数通过模这个定值反向找出这个数据。

为什么:

为什么引用有补码的概念?

引用补码是为了解决前面问题:计算机中没有减法器,减法运算只能通过转化加法来进行。引用补码的好处在于相同进制的减法运算中,减去一个数等于加上这个数字的补码。

比如321-111=321+(999-111)=321+888=1209,咦?为什么结果不是210?

别急,前面提到模的概念,十进制的3位数模的定值为999,1209明显大于999

对于超出模的运算结果还要取模才是最终结果,1209-999=210与实际结果相符。

现在:

对于计算机中使用的二进制运算,在做减法时减去一个数等于加上这个数的补码同样适用,只是结果取字节位数(8的倍数)而已。

所以:

计算机中的数是以补码的形式存储的。

  由于二进制只有0和1两种数字,二进制正数的补码还是它自身,负数的补码直接取反就行了,10000001的补码是1111110。

奇怪了!为什么上面的10000001最高位1没有取反呢?

其实对于一个字节的最高位,计算机中是有规定的,正数的最高位为0,负数的最高位为1。

还没完:

现在好了吗?已经知道计算机中以补码的形式存储数字,也解决了减法转换加法的困难。

其实还没完,有一个特殊的数字需要处理,这个数字就是0。

按照之前的策略,用一位字节表示0其实有两种表示方法:

用负数表示0为:11111111,最高位1符号位,其余7位0000000取反1111111

用正数表示0为:00000000,最高位0符号位,其余7位0000000不变。

怎么办:

对于这种情况,科学家已经解决了,就是稍微改变存储策略。

怎么改变呢?

其实只是做了很小的变动:正数的不变,负数的移动了一位。

在原来的策略中-127的在计算机中的存储为10000000,最高位1为符号位,后面的7个0是取反后的结果;用负数表示0在原来的策略中表示为11111111。

现在要解决的问题是:如何将表示负数0的这种情况去掉,从而使计算机存储数据变得唯一。

科学家只是将原来表示-127的1000000用来表示-128,原来表示负数0的11111111用来表示-1。

这样一来就完美的解决了存储对于数字的唯一性问题!

所以:

-128~127在计算机存储的是10000000~01111111就是这样来的。

结论是:

计算机中存储的数字,正数的跟自身一致(正数补码就是自身),负数的要加-1才是计算机要表示的数。如-128在计算机的存储的是10000000,如果我们看到这串数字除掉符号位7个0取反计算出的是127就以为它要表示-127,其实计算机要表示的是数字-128,所以说要-1。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有