大端存储二进制数据,为什么计算机存储数据用十六进制

seosqwseo4周前 (08-24)测评日记17

一、大小端模式

加3g实验室的艰难之旅,遇到一道这样的实验室面试题:

**输出结果为2000000**

原题对a强制转换为int,64位机指针长度为八个字节,所以改为long int。

先来分析一下表达式,a为数组a[0]的地址,强制转换为长整型变为地址的数值后加一,实际为第一个元素的第二字节地址的数值。后转换为一指向整型的指针并赋值给ptr2。整型为4个字节,从第一元素第二字节开始往后读取四个字节,间接访问得出此四个字节代表的数值,并以十六进制输出。

那么问题来了,为什么是2000000,数组的整型元素在内存中是怎么储存的?这四个字节内存的是怎样的二进制数?为什么会这样储存?

经过度娘的帮助,它终于出现了——大小端模式。

大端模式

大端模式是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中。大端模式与我们的阅读习惯相同。

小端模式

小端模式是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中。

举例

int a=2;

地址:小----->大

在大端模式中,a存为:

0x00 0x00 0x00 0x02

在小端模式中,a存为:

0x02 0x00 0x00 0x00

在计算机系统中,地址是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8**t。但是在C语言中除了一个字节(8**t)的char之外,还有两个字节(16**t)的short型等超过一个字节的数据类型。另外,对于位数大于 8位的处理器,由于寄存器宽度大于一个字节。所以必然存在如何将多个字节安排的问题,因此就有了大端存储模式和小端存储模式。

小说《格列夫游记》中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破。斯威夫特借以讽刺英国的政党之争,在计算机工业中指数据储存顺序的分歧。

一个简单的判断数据储存模式为大端模式还是小端模式。

a[5]={1,2,3,4,5};

第一个元素和第二个元素储存方式

(地址:小--->大)

大端模式下:

0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x02

小端模式下:

0x01 0x00 0x00 0x00 0x02 0x00 0x00 0x00

截取第二个字节到第五个字节

大端模式:

0x00 0x00 0x01 0x00

小端模式:

0x00 0x00 0x00 0x02

读取数据

大端模式:

从高地址往低地址读取

0x00 0x00 0x01 0x00

读取数据转换为十六进制为100

小端模式:

从低地址往高地址读取

0x00 0x00 0x00 0x02

排成大端(0x02 0x00 0x00 0x00)

读取数据转换为十六进制为2000000

所以在大端模式下,结果为100。

在小端模式下,结果为2000000。

学C学得好迷啊,心好累,哈哈哈哈哈。

二、存储芯片的组成

存储体由哪些组成

存储体由许多的存储单元组成,每个存储单元里面又包含若干个存储元件,每个存储元件可以存储一位二进制数0/1。

存储单元:

存储单元表示存储二进制代码的容器,一个存储单元可以存储一连串的二进制代码,这串二进制代码被称为一个存储字,代码的位数为存储字长。

在存储体中,存储单元是有编号的,这些编号称为存储单元的地址号。而存储单元地址的分配有两种方式,分别是大端、大尾方式、小端、小尾方式。

存储单元是按地址寻访的,这些地址同样都是二进制的形式。

MAR

MAR叫做存储地址寄存器,保存的是存储单元的地址,其位数反映了存储单元的个数。

用个例子来说明下:

比如有32个存储单元,而存储单元的地址是用二进制来表示的,那么5位二进制数就可以32个存储单元。那么,MAR的位数就是5位。

在实际运用中,我们知道了MAR的位数,存储单元的个数也可以知道了。

MDR

MDR表示存储数据寄存器,其位数反映存储字长。

MDR存放的是从存储元件读出,或者要写入某存储元件的数据(二进制数)。

如果MDR=16,,每个存储单元进行访问的时候,数据是16位,那么存储字长就是16位。

主存储器和CPU的工作原理

在现代计算中,要想完成一个完整的读取*作,CPU中的控制器要给主存发送一系列的控制信号(读写命令、地址译码或者发送驱动信号等等)。

说明:

1.主存由半导体元件和电容器件组成。

2.驱动器、译码器、读写电路均位于主存储芯片中。

3.MAR、MDR位于CPU的内部芯片中

4.存储芯片和CPU芯片通过系统总线(数据总线、系统总线)连接。

三、为什么计算机存储数据用十六进制

*计算机存储数据是二进制形式,二进制每8位为一个字节,如你的例子:

十进制二进制

41715 1010 0010 1111 0011

十六进制 A 2 F 3

*右边的是低位,标记为第0位,向左边一位是第1位,这样一直到这个数据的第15位。

第0~7位11110011是这个数据的低位字节(因其包含的所有位号均小于其他字节),10100010是高位字节(8~15位)。

*计算机存储小单位是字节,存储顺序(小端模式)为低位字节在前、高位在后:

11110011,10100010即十六进制标记为F3,A2两个字节。计算机在读取这两个字节到整形变量时也会自动将F3装载到变量的0~7位,而将A2装载到高位字节的。

*这是一种约定,由于存在两种模式,即大端模式和小端模式,以上这种先存低位字节的叫小端模式,大端模式则先保存高位字节,如果你遇到大端模式的CPU和*作系统,那么你的数据就会保存成A2,F3了。

*大部分CPU均采用小端模式存储数据,内存中和其他存储介质(Flash、硬盘、光盘等)中存放数据的方式均是是统一的。

相关文章

JAV多媒体教学一体机65英寸视频会议平板电视触控交互式电子白板幼儿园培训教育触摸屏智慧屏商用测评怎么样

JAV多媒体教学一体机65英寸视频会议平板电视触控交互式电子白板幼儿园培训教育触摸屏智慧屏商用测评怎么样

很多小伙伴在关注JAV多媒体教学一体机65英寸视频会议平板电视触控交互式电子白板幼儿园培训教育触摸屏智慧屏商用怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分...

绿联(UGREEN)USB3.0高速读卡器多功能SD/TF读卡器多合一使用反馈分享

绿联(UGREEN)USB3.0高速读卡器多功能SD/TF读卡器多合一使用反馈分享

很多小伙伴在关注绿联(UGREEN)USB3.0高速读卡器多功能SD/TF读卡器多合一怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大...

南孚5号电池40粒五号碱性质量测评好不好

南孚5号电池40粒五号碱性质量测评好不好

很多小伙伴在关注南孚5号电池40粒五号碱性怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

MAXCAM适用dji大疆灵眸OSMOPOCKET怎么样

MAXCAM适用dji大疆灵眸OSMOPOCKET怎么样

很多小伙伴在关注MAXCAM适用dji大疆灵眸OSMOPOCKET怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的...

有道英语听力宝复读机学习机英语语文学习提升神器好不好

有道英语听力宝复读机学习机英语语文学习提升神器好不好

很多小伙伴在关注有道英语听力宝复读机学习机英语语文学习提升神器怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品...

梓润1080p高清会议记录仪DV摄像机摄像头高清家用监控户外随身便携式录像机穿戴背夹式口袋录像神器测评分享

梓润1080p高清会议记录仪DV摄像机摄像头高清家用监控户外随身便携式录像机穿戴背夹式口袋录像神器测评分享

很多小伙伴在关注梓润1080p高清会议记录仪DV摄像机摄像头高清家用监控户外随身便携式录像机穿戴背夹式口袋录像神器怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使...