整数的储存方式
还记得之前的课程,变量在内存中,看到是反着排列的吗?
当时我们没有深究这个问题
但是我们现在学习内存了,就有疑惑了
为什么 4字节数据是反着排列的呢?
原因是,
实际上在内存中,没有正反之分,都是按一字节 一字节顺序排列的 ,只是我们要按照什么方式去拿。
例如上图 内存中就是 78 56 34 12
而我们拿的时候 是从后面开始拿放在高位而已 变成0x12345678
但是整数类型,为什么是反着拿呢?而不是 正着拿,变成0x78563412呢?
实际上根本原因是,设计者为了短类型数据兼容转换成长类型数据(小端),
人为规定的储存方式而已。
我们分别到内存中去观察 char word 和dword的数值
例如1,内存中分别对应的是
char 01
word 01 00
dword 01 00 00 00
所以无论你什么宽度,内存中都是第一个字节里放了1个01
但是问题来了,读的时候怎么读?
1,100,1000000? 当然不对,一个鸡蛋无论放到大篮子还是小篮子里都是1
那么就要注意读取的时候的方法
01 00 00 00
如果按照 char 取读就是 01
如果按照 WORD 去读就是 0001
如果按照 DWORD 去读就是 00000001
这样就数据类型兼容了。
所以才给我们造成一种反着存放的错觉。
来个简单的题目
4字节 99999 666666在内存中字节集是怎么存放的?
99999转成16进制是 0x0001869F
拆分成字节 就是 00 01 86 9F 而在内存中真实的存放顺序就是:9f 86 01 00
同理 666666 在内存中的真实存放顺序就是:
2A 2C 0A 00
同样大家可以到教案软件中,进行推箱子的顺序排列锻炼
如下图:
视频链接:
交流群:833075627