数据存储在哪里?
答:数据存储在存储器中
那么什么是存储器?
好嘛,我也不解释不清楚。但是我知道用什么能存储数据
- 纸张(想象一下打孔纸带,以前的指令和数据都码在上面)
- 内存(现在存储介质为晶体管(早期还有其他手段《水银延迟线存储器》))
- 寄存器(存储介质为晶体管)
- 硬盘
- 缓存部件
存储器容量的问题?(这里指内存、寄存器)
能存储下多少的数据,这个就需要量化了。例如你从A跑到B点。你告诉别人我跑了那么长,那么长?懵逼
存储器是由晶体管组成,一个晶体管表示2种状态,那么一组晶体管就可以表示多种状态。
那么能存储2种状态的一个晶体管,称为bit。类似的还有B、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
然后由大佬来制定存储单位的换算关系。不好理解?(10毫米=1厘米,100厘米=1米,这些都是人规定的,当大家都认可的时候这就是标准啦)
存储器的存储单位划分比较大方,最小单位是字节Byte,然后对每一个存储单元编号
每一个小格子就是一个bit
根据大佬定义,1 Byte(B) = 8 bit,希望大家能理解
了解了数据的存储和存储器的计量单位后还需要考虑下面三点
- 数据怎样去编码?
- 数据在存储器的排列格式
- 数据范围
先来解决数据的存储器的排列格式
0x12345678 如何排列在存储器中?
注:一个16进制数等于4个bit。二个16进制等于8个bit1个字节
下面以最小单位字节举例
0x12345678 是第一个存储单元放0x12 还是存放0x78,这是一个规定问题,不是这样就是那样,反正别人规定了你理解后并且记忆就行,这个问题本身就存在,你解决不了就理解他记忆他。
如果不好理解我在继续给你举例:
- 方向盘在左还是右?当设计汽车的时候,这个问题不是左就右。谁好谁坏有区别?
- 左撇子和右撇子在吃饭这个问题上,用左手拿筷子还是右手筷子有区别?
数据在存储器中排序时也有这样的问题
被认知的有两个(当然你可以设计出不友好的排列,思想一定不要被限制):big endian(大端模式)、little endian(小端模式)
现在来说说对数据的编码
存储:数字10
- 对数字10进行XXX编码
- 不存在排列的问题,1字节可表达256种状态,10<256
- 存储器最小存储单位是字节,所以数字10占用1个字节
存储:字符a
- 计算机能存储的是二种状态(电信号、0或1、高低电平),不管怎么理解,都是二种状态,采用多个晶体管组合用来表达更大范围状态。所以这里的问题是,字符a不能直接存储,需要对字符进行编码。存储编码后的值。(例如你看见红灯知道要停下来了,看见绿灯可以行走了,这里就是对走和停的编码。)
- 同上
- 同上
存储:300.232323
- 编码
- 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解码