十一.C++网络安全学院之整数的储存方式

整数的储存方式

还记得之前的课程,变量在内存中,看到是反着排列的吗?

当时我们没有深究这个问题

但是我们现在学习内存了,就有疑惑了

为什么 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

同样大家可以到教案软件中,进行推箱子的顺序排列锻炼

如下图:

视频链接:

十一.整数内存中的储存方式-CSDN直播

交流群:833075627

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值