计算机数据存储

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

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

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

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

0000 0001
0010 0011
0100 0101
0110 0111

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

1000 1001
1010 1011
1100 1101
1110 1111

上述八个数字表示右半部分,范围是 -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

计算机中的数据存储与PTA相关推荐

  1. 【转载】数据在计算机中是如何存储的

    hello,小伙伴们好,我是江湖人送外号[道格牙]的子牙老师. 有几天没更新文章了哈.因为手写JVM小班已经开课了,需要花时间备课,录视频试讲,解答学员问题-比较耗时间.今天就来一篇超实用超硬核的文章 ...

  2. 数据在计算机中是如何存储的

    hello,小伙伴们好,我是江湖人送外号[道格牙]的子牙老师. 这篇文章,咱们讨论的问题是数据在计算机中是如何存储的.为什么要讨论这个问题呢?因为在手写JVM的过程中,我们需要实现所有的数据类型,比如 ...

  3. 计算机中数的存储和处理都使用二进制对吗,计算机中的数据可分为两种类型:数字和字符,它们最终都要转换为二进制代码进行存储和处理。对于人们习惯的十进制数字,通常用____进行转换。...

    计算机中的数据可分为两种类型:数字和字符,它们最终都要转换为二进制代码进行存储和处理.对于人们习惯的十进制数字,通常用____进行转换. 更多相关问题 [单选] 电力线路巡视检查周期,定期巡视每月至少 ...

  4. Android中的数据存储

    Android中的数据存储 1.SharedPreference存储(共享参数) 1.1.使用SharedPreferences存储和读取数据的步骤 存储数据 保存数据一般分为四个步骤: 使用Acti ...

  5. 7.计算机中的数据的表示及编码

    计算机中数据的表示与编码 1.数的进位计数制 2.数值型数据在计算机中的表示 3.二进制的编码 1.数的进位计数制 基数:每个数位上所能使用的数码的个数 位权:处在某一位上的 1 所表示的数值的大小, ...

  6. 整数在计算机中是如何存储的?

    整数在计算机中是如何存储的? 无符号整数按其二进制的形式直接存储 有符号整数按其补码的形式存储 以8位二进制数为例: 无符号整数存储范围:0~2^8 - 1 [0, 255] 有符号整数存储范围:-2 ...

  7. datasg中的数据存储情况

    datasg中的数据存储情况 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/27/3846618.html

  8. 浮点数计算机的表示案例,计算机中的数据及其应用案例.docx

    计算机中的数据及其运算HLJ_DJS☆笔记整理计算机中的数据包括数值性数据和非数值性数据两种.数据在计算机中通常是以二进制的形式表示的.对数值性数据进行编码即数值码,可以在计算机中对其进行各种数的运算 ...

  9. android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...

    在android开发中进行数据存储与访问的多种方式介绍 更新时间:2013年06月07日 16:24:23   作者: 很多时候我们的软件需要对处理后的数据进行存储或再次访问,Android为数据存储 ...

最新文章

  1. 全面理解目标检测中的anchor
  2. PHP和Java的联系,PHP和Java的功能
  3. 实例教程一:电话拨号器
  4. ecs服务器配置git_阿里云 ECS服务器(CentOS 7)安装和使用Gitlab教程
  5. c语言发送结构体 文件
  6. 银河足球队 android 8,银河足球队手机版_银河足球队安卓游戏v1.0.1-游迅网
  7. sublime使用技巧(4)-- 其他技巧【持续更新】
  8. proguard android 配置,android – Proguard忽略库的配置文件
  9. mysql update field_mysql-更新表与另一个选择,但字段是SUM(someField)
  10. 沉淀一年零八个月,我也拿到了博客专家
  11. 程序员为什么非得参加一场编程竞赛?
  12. spring.net 对象创建 几种情况
  13. linux查看系统位数
  14. 机器视觉中的图像采集卡
  15. linux dlopen 源码,采用dlopen、dlsym、dlclose加载动态链接库
  16. 让FineUI数据绑定支持dynamic对象
  17. eclipse远程发布代码的方法(SSH自动同步)
  18. 量子计算学习笔记:量子计算发展史
  19. 高级火山图 突出显示自定义的基因volcanic volcano plot duqiang 差异基因火山图
  20. python cox模型_基于Cox比例风险模型的失效时间预测

热门文章

  1. 2万字一网通办远程视频踏勘建设方案67页
  2. matlab/simulink电力电子仿真有效值RMS设置和使用
  3. 首席新媒体黎想教程:一份完整的运营方案,应包含的7个方面
  4. BIST(build_in selftest)介绍
  5. 非常可乐(HDU-1495)
  6. 高中在线计算机,高中计算机考试试题集-20210414015151.docx-原创力文档
  7. Httpd:无法找到/etc/httpd/conf
  8. vue-router之解决addRoutes使用遇到的坑
  9. 比较简单的nginx搭建静态资源linux服务器教程
  10. Python日期的加减