在上一篇写到冯诺伊曼结构中计算机的硬件组成,第一个就是存储器,用于存储数据和程序。那么这一节来梳理一下在计算机中这些数据是怎么存储的。

一、数字在计算机中是如何存储的

   我们将数字分为整数和实数分别讨论

  1. 整数

            有三种存储方法:无符号表示法、符号加绝对值表示法、补码表示法

  • 无符号表示法只能用于存储无符号整数,举例说明如下:

      

     

     

  • 符号加绝对值表示法,最高位用于表示符号,0表示正,1表示负。先将绝对值转化为二进制,二进制不足n-1位的左边补0,再加上最高位的符号位。举例说明如下: 

          

 

     2. 实数

   实数存储步骤如下:1.先规范化,移动小数点使得小数点左边只有一个1  。2.分别对符号、指数、尾数进行处理  。 3.连接符号、指数、尾数

                  

     *余码系统:

                

 

   写到这里还是有些晦涩,下面就用我们熟悉的单精度和双精度来看一下。首先IEEE标准规定,单精度数用32位来存储,双精度数用64位来存储。

   对于单精度来说,要用一位来标识符号,用8位来存储指数,用32位来存储尾数

   对于双精度来说,要用一位来标识符号,用11位来存储指数,用52位来存储尾数

            

 

       举例如下:

            

 

二、文本在计算机中是如何存储的

   文本不能像数值那样可以转换为二进制,那我们是如何处理的呢?基本思想是:用一个二进制数来映射。我们熟悉的ASCII码就是一种映射对应关系。最开始时ASCII码是由美国人提出的,在英文中只有26个字母再加上一些符号,一共有127个,占用了最高位为0的8位二进制数就能映射完成,即0000 0000——0111 1111,十进制是0——127.ASCII表如下:

   

 

   之后欧洲的ISO-8859-1 在ASCII的基础上,用了最高位为1的8位二进制数。称为扩展ASCII编码表。

   那汉字是如何存储呢?我们知道常用汉字有几千个,用8位二进制肯定无法映射完,所以采用了16位两个字节,也称为全角(ASCII 半角)

   我们常用的编码表还有Unicode,其中更加转换规则的不同,又有UTF-8、UTF-16、UTF-32.

 

三、音频在计算机中是如何存储的

    因为音频会随着时间或空间连续的变化,存储时用的是模拟数据。涉及到声音的采样,所谓的采样就是选择采样的点来量度声音的值并记录下来。

       

      

 

    而采样率就是每秒的采样数目,之后再经过量化将样本的值四舍五入为一个整数的过程。再编码,如果样本值为正数用无符号表示法,如果样本值有负数就用符号加绝对值表示法。而用于存储样本所用的二进制位数称为 位深度。位率表示 每秒音频存储时所用的二进制位数(位率=位深度*采样率)

   例如:16b*40000个/s=640000b/s=78kB/s

  当今主流的音频编码标准是MPEG Layer3(MP3)

 

四、图像在计算机中是如何存储的

  图像的存储主要有两种:光栅图和矢量图

  1.光栅图

  • 模拟数据:图像的颜色随空间连续变化
  • 采样->扫描、样本->像素
  • 解析度: 每英寸图像采集多少个像素
  • 色彩深度:像素的位数,其中真彩色24位(可表示1677 7216种颜色),索引色8位(可以表示256种颜色)
  • 编码标准有:BMP、TIF、PNG、JPEG
  • 缺点:体积大、放大后会失真

  2.矢量图

  • 并不存储图像的像素,而是存储绘制图像的公式及颜色
  • 编码标准:DWG、DXF

 

 

   

版权声明:本文为taoye1997原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/taoye1997/p/12097979.html