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

seosqwseo3个月前 (08-24)测评日记39

一、大小端模式

加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、硬盘、光盘等)中存放数据的方式均是是统一的。

相关文章

小米(MI)电视EA32英寸金属全面屏价格是多少

小米(MI)电视EA32英寸金属全面屏价格是多少

很多小伙伴在关注小米(MI)电视EA32英寸金属全面屏怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来...

Vidda海信电视Vidda65英寸65V1F-S测评分享

Vidda海信电视Vidda65英寸65V1F-S测评分享

很多小伙伴在关注Vidda海信电视Vidda65英寸65V1F-S怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的...

康佳(KONKA)55V5D测评怎么样

康佳(KONKA)55V5D测评怎么样

很多小伙伴在关注康佳(KONKA)55V5D怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

网易有道词典笔X3s旗舰版点读笔英语学习翻译神器图文测评

网易有道词典笔X3s旗舰版点读笔英语学习翻译神器图文测评

很多小伙伴在关注网易有道词典笔X3s旗舰版点读笔英语学习翻译神器怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产...

绿联USB/Type-C读卡器3.0高速好不好用

绿联USB/Type-C读卡器3.0高速好不好用

很多小伙伴在关注绿联USB/Type-C读卡器3.0高速怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起...

小米积木质量好不好

小米积木质量好不好

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