当前位置:   article > 正文

数据存储的问题(1)

记录1000个晶体管状态要几个字节

数据存储在哪里?

  答:数据存储在存储器中

那么什么是存储器?

  好嘛,我也不解释不清楚。但是我知道用什么能存储数据

  1. 纸张(想象一下打孔纸带,以前的指令和数据都码在上面)
  2. 内存(现在存储介质为晶体管(早期还有其他手段《水银延迟线存储器》))
  3. 寄存器(存储介质为晶体管)
  4. 硬盘
  5. 缓存部件

存储器容量的问题?(这里指内存、寄存器)

  能存储下多少的数据,这个就需要量化了。例如你从A跑到B点。你告诉别人我跑了那么长,那么长?懵逼
  存储器是由晶体管组成,一个晶体管表示2种状态,那么一组晶体管就可以表示多种状态。

  那么能存储2种状态的一个晶体管,称为bit。类似的还有B、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。

  然后由大佬来制定存储单位的换算关系。不好理解?(10毫米=1厘米,100厘米=1米,这些都是人规定的,当大家都认可的时候这就是标准啦)

  1 Byte(B) = 8 bit(早期1Byte=18bit)
  1 Kilo Byte(KB) = 1024B
  .......还有很多,自行搜索。

  存储器的存储单位划分比较大方,最小单位是字节Byte,然后对每一个存储单元编号

每一个小格子就是一个bit

根据大佬定义,1 Byte(B) = 8 bit,希望大家能理解

了解了数据的存储和存储器的计量单位后还需要考虑下面三点

  1. 数据怎样去编码?
  2. 数据在存储器的排列格式
  3. 数据范围

 

先来解决数据的存储器的排列格式

  0x12345678  如何排列在存储器中?

  注:一个16进制数等于4个bit。二个16进制等于8个bit1个字节

  下面以最小单位字节举例

  0x12345678 是第一个存储单元放0x12 还是存放0x78,这是一个规定问题,不是这样就是那样,反正别人规定了你理解后并且记忆就行,这个问题本身就存在,你解决不了就理解他记忆他。

  如果不好理解我在继续给你举例:

  1. 方向盘在左还是右?当设计汽车的时候,这个问题不是左就右。谁好谁坏有区别?
  2. 左撇子和右撇子在吃饭这个问题上,用左手拿筷子还是右手筷子有区别?

  数据在存储器中排序时也有这样的问题

  被认知的有两个(当然你可以设计出不友好的排列,思想一定不要被限制):big endian(大端模式)、little endian(小端模式)

 

现在来说说对数据的编码

存储:数字10

  1. 对数字10进行XXX编码
  2. 不存在排列的问题,1字节可表达256种状态,10<256
  3. 存储器最小存储单位是字节,所以数字10占用1个字节

存储:字符a

  1. 计算机能存储的是二种状态(电信号、0或1、高低电平),不管怎么理解,都是二种状态,采用多个晶体管组合用来表达更大范围状态。所以这里的问题是,字符a不能直接存储,需要对字符进行编码。存储编码后的值。(例如你看见红灯知道要停下来了,看见绿灯可以行走了,这里就是对走和停的编码。)
  2. 同上
  3. 同上

存储:300.232323

  1. 编码
  2. 300肯定不用用1个字节存储,原因就是1字节只能表达256,300>256。那么需要2个存储单元(2个字节)那么存在排列的问题了。到底是 30 00 还是 00 30?  这个就是大小端的问题了。 如果是小端模式,数字的地位在 低地址,高位数据在高地址,假设存储地址从低高到排列那么应该是 00 30。大端相反

     

   3.占用2个字节

 

大家认知的编码

  整数:补码

  小数:float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

  字符:

    字母:ASCII

    汉字:GBK、GBK2312
  术语:

      乱码:利用你对整数使用了补码进行编码,在解码的时候采用了ASCII,这个现象就是乱码啦

         你使用GBK对汉字编码,而缺采用UNICODE解码

 

  

 

 

  

转载于:https://www.cnblogs.com/binaryAnt/p/11069801.html

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号