无符号数在计算机中怎么存储,计算机中数的存储

计算机中数的存储

1、计算机的存储单元

计算机内有很多存储单元,计算机用这些存储单元存储数据,一个存储单元可以存储一个八位的二进制数,一个存储单元又称作一个字节,记作1B。计算机的处理器一次可以处理的字节数(存储单元数)称作该计算机的字长,按计算机的字长划分,微型计算机可分为8位机、16位机、32位机和64位机,现在的主流机型是64位机。即计算机中的处理器一次可以处理64位二进制数,也就是一次可以处理8个字节的二进制数。

我们可以用一个存储单元来存储一个数据,也可以用多个存储单元联合起来存储一个精确度更高的数据,使用两个单元、四个单元、八个单元存储数据的方法与使用一个存储单元存储数据的方法完全相同,只是位数不同而已,使用多个存储单元存储数据时需将各单元连接起来使用,从而使存储的数据的数值范围更大。为了使叙述方便简洁,下面我们介绍用一个存储单元存储数据的方法。

2、计算机中数值的存储

在计算机中要存储有符号的数,则数值的正负号也只能用0和1表示。我们约定用八位中的最高位表示数的符号,比如我们要在存储单元中存储数值-35,首先要将35写成七位二进制数。35写成二进制数是100011B,不足七位,前面可以补0凑成七位,结果是0100011B。在最高位再添加1作为负号,于是-35在存储单元中存储的形式是:

a4c26d1e5885305701be709a3d33442f.png

同理,如果要存储正数35,则最高位应为0,结果如下图所示。

a4c26d1e5885305701be709a3d33442f.png

实际上在计算机中数有三种表示方法,分别是原码表示、反码表示和补码表示:

1)数的原码表示法

将一个数值写成二进制后再在符号位添加1或0作为符号,即为该数的原码,比如上面的10100011和00100011,就是-35和35两个数的原码,最左端的1或0均表示该数的符号。

2)数的反码表示法

正数的反码和原码相同,负数的反码是符号位为1,其余各位为原码的相反数,即原来为0的要写为1,原来为1的要写为0,比如35,其反码表示法仍和原码相同,即可表示为:

a4c26d1e5885305701be709a3d33442f.png

而-35的反码则应表示如下:

a4c26d1e5885305701be709a3d33442f.png

其中最高位的1表示负号,其余各位原来是1的变为0,原来是0的变为1

3)补码表示法

正数的补码表示法和和原码表示方法相同,负数的补码表示法是:符号位为1,其余各位为反码+1,比如35,其补码表示法仍和原码相同,即可表示为:

a4c26d1e5885305701be709a3d33442f.png

但-35的补码应表示为:

a4c26d1e5885305701be709a3d33442f.png

该结果显然是在上面的反码未位加了1后得到的。

引入了反码和补码的概念后,计算机中数的运算可得到简化:

实际上计算机中的数值是按补码存储的。下面就来说明这样存储数据的好处。

4)计算机中数的加减运算

【例题1】写出35和-1在计算机中的补码表示方法,并完成35-1的运算。

由前面的例子已知35的八位补码是

a4c26d1e5885305701be709a3d33442f.png

补码是在反码的未位加1得到的数。

下面完成35-1的运算,35-1的运算实际是两个数的补码相加的运算。将两个数补码直接相加,得00100010,参见下图。因为最高位是0,所以为正数,其后七位可直接转换为十进制数,转换后为34。这恰是正确的计算结果。

a4c26d1e5885305701be709a3d33442f.png

【例题2】完成-35-1的运算。

由前面的例子已知-35和-1的八位补码分别是

a4c26d1e5885305701be709a3d33442f.png

由于计算结果的最高位是1,所以结果应为负数,最高位后的七位为负数的补码,还需求出原码,才能得到结果,由补码求原码的方法是再求补码(即再取反码并加1),下面由补码求原码(注意:不含符号位)。

a4c26d1e5885305701be709a3d33442f.png

上面的36即为由补码1011100求得的原码,再添加负号即为本题的结果。

从上面的例子可以看出负数用补码表示后,二进制数的加法和减法得到了统一,即通过加法运算就可以解决减法的问题。

我们上面求补码的过程虽然有些麻烦,但实际这一过程是由计算机自动完成的,计算机中用补码表示数的优越性至此一目了然。即加法和减法被统一成了同一种运算。

5)计算机中整数的表示范围

用原码表示时,用一个字节可以存储的有符号数

最大的数是:01111111,最高位表示符号,其余七位转换为十进制数后为127,即27-1。

最小的数是:11111111,最高位是符号,其余七位转换为十进制数后是127,即-127,

即用原码表示的数的范围是-127至+127,其中0被表示了两次,00000000和10000000都表示数值0,这是这种表示方法的缺点之一。

用补码表示时:

最大值是正值,与用原码表示时相同,也是01111111,而最小值为10000000,对其中符号后的七位取反加1后得到128,即最小数是-128。用补码表示的数的范围是-128至+127,比原码表示的范围多1,因为原码中0被表示了两次。

如果用计算机表示无符号数(将最高位也看作数值),则最大值是11111111,即255,最小数是00000000,即0,表示的数的范围是0至255。

需要注意,计算机中数值计算时一定不要超过可以表示的数的范围,否则计算结果就会出现错误。

6)

计算机中的乘除运算

计算机中的乘法运算可以通过左移位和加法来实现。

【例题3】计算17X4

首先将第一个数用八位二进制补码表示:

17补码为:00010001

将上面的数值左多两位,为01000100,转换为十进制后即为68.,这里通过两次左移即实现了二进制数的乘法运算。

【例题4】计算17X5

首先将第一个数用八位二进制补码表示:

17补码为:00010001

将该数左移两位,再和原数相加

a4c26d1e5885305701be709a3d33442f.png

转换为十进制数为85,即17乘以5等于85

【例题5】计算-17X4

首先将第一个数用八位二进制补码表示:

-17补码为:11101111

左移两位后为10111100,结果仍为负数,取反加1后求得原码为-68。

有人可能会问如果向左移三位,最高位就变成0了,不就错了吗,是的,这时因为左移三位(相当于-17X8),其结果就超出8位数表示的范围了。我们讨论的的前提是计算结果不能超出8位二进制数表示的范围。在计算机中实际是使用32位甚至64位表示整数,当然其范围比此处讨论的数要大的多。

从上面的例子不难看出,在计算机中只用向左移位和相加就可实现乘法运算。

同理用向右移位和相减也能实现除法运算,只不过减法实际也是由加法实现的。

通过前面的讨论可以得到结论,计算机中使用二进制数不仅容易实现,而且也容易简化计算过程,全部四则运算都可由加运算和移位运算来解决。实际上在高等数学中,任何复杂的单自变量函数都可以用四则运算来无限逼近(使用泰勒展开),实际上也就是说任何复杂的运算在计算机中都可由二进制的加运算和移位运算来实现。而二进制数的加法只需使用下面的三条规则就足够了:

0+0=0

0+1=1

1+1=10

实际上计算机中的数还有定点数和浮点数之分,前面讨论的数实际是假设小数点固定在一个字节的最右端,因此表示的是定点整数,如果我们认为小数点在一个字节的最左侧,则上面讨论的就是定点小数。我们也可以用另一种形式来表示数,比如数值“1234”可以写成0.1234乘以10的4次方,而数值23.546可以表示为0.23546乘以10的-2次方,这样我们就可以将一个数分为两部分来表示,一部分称为尾数,一部分称为指数。这样不仅能表示整数,而且也能表示小数,当然一个字节也需要分为两部分,比如用前面三位表示一个数的指数,后面五位表示一个数的尾数,这样表示的数的范围可以更大,这样表示的数我们称之为浮点数。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值