计算机中的数据存储与PTA

计算机数据存储

在做PTA上的题目时,我们经常遇到要处理数据溢出的问题,本篇文章大致讲述了如何理解数据在计算机中的表现形式和数据溢出。

位模式:由计算机位组成的有序序列。通常长度为八的位模式称为一字节。计算机通过位模式表达各种数据,但计算机表示数据的位是有限的,所以计算机不能直接表达无穷大的数据。

计算机表达整数:整数被当作小数点位置固定的数字,所以可以用定点表示法存储整数。尽管如此,对于较大的整数,我们可能会将其存储为小数部分为0的实数。无符号整数和有符号整数在计算机内的表示不同。

1. 无符号整数的表示法
无符号整数的范围是0~2^n-1,n是计算机用来表示无符号整数的位数。若数据超过这个范围将发生溢出。
无符号整数的应用:1.计数 2.寻址 3.存储其他数据类型
无符号整数的溢出处理:假如你有一个无符号整数K待存储,它实际存储在计算机中的值是K%(max+1),max是计算机所能存储的最大无符号整数。比如拟采用八位的位模式来存储无符号整数,你能存储的最大数字是2^8-1=255,这是如果你想存储300,实际其在计算机内表示的值是44,这就发生了溢出。
2.符号加绝对值表示法
尽管这种表示法在计算机中不常用,但在一些计算机计算时我们会用到这种表示法。它的原理即是将数据区间划分为等分的两部分,左半部分表示正数,右半部分表示负数。
例如:你采用四位的位模式表示数据

00000001
00100011
01000101
01100111

表格中的八个数是用四位位模式表达数据的左半部分。范围是 +0-7

10001001
10101011
11001101
11101111

上述八个数字表示右半部分,范围是 -0-7

我们可以看到这种方法表达了两个0,即+0和-0
符号加绝对值表示法会溢出,它的溢出情况有两种,正溢出和负溢出。求解溢出后结果的方法由两种。
方法1:(假设是4位的位模式)
列出可能表达的数字+0 1 2 3 4 5 6 7 -0 -1 -2 -3 -4 -5 -6 -7
我们将这一串数字看成是一串珠子,首尾相接,也就是+0左边的数字是-7,-7右边的数字是0,这时我们如果想存储-9,实际上在计算机中实际表达为1。
方法2:(假设是4位的位模式)
因为方法1采用枚举法,所以这种方法不适用于复杂的位模式。我们采用另一种方法。此时我们将溢出分成两类,正数溢出(存储太大的正数)和负数溢出(存储太小的负数)。
计算公式为:正数溢出下:实际存储 = -0-理想存储%(正数表达最大值+1)
负数溢出下:实际存储 = +0+|理想存储|%(|负数表达的最大值|+1)
如11(四位模式下)实际存储为-0-11%8 = -3
当然这种情况下溢出可能很复杂,因为太大的正数可能在负数表示端也溢出了,此处不做讨论,思路一致。
3.二进制补码表示法(假设是8位的位模式)
我们来介绍计算机内十分常用的二进制补码表示法。
首先了解两种操作:求反码和补码。
1.一个二进制位模式的反码
直接将各位取反即可。
如10001101的反码是01110010
2.一个二进制位模式的补码
方法1:
从右往左比对位,当出现一个1之后将左边的位取反。
如100011(第一个1)00的补码是01110100
方法2:
将二进制取反后加1
10001100 取反 01110011 加1 01110100
二进制补码表示法存储数据时,最高位是符号位,最高位为0表示正数,最高位为1表示负数,如果要存储一个正数或者0在计算机里,则直接将最高位置零,直接存储就可以了。如果是表示负数,则存储其绝对值再取反。
如:表达96 则为01100000
表达-96 则先存储01100000再取反 10100000
同时,如果要把首位为1的负数转换为十进制,步骤是先取反得到绝对值再加符号
如10100000 取反 01100000 ===> 96 => 加上符号=> -96

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值