大小端问题——多字节对象的存储规则

一、多字节对象的存储方式。

对于跨越多字节的程序对象,我们可以建立两个规则:
① 这个对象的地址是什么?
② 在内存中如何排列对象的这些字节?

在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。

例子:
假设一个类型为 int 的变量 x 的地址为 0x100,也就是说,地址表达式 &x 的值为 0x100。那么,(假设数据类型 int 为32位表示)x 的 4 个字节将被存储在内存的 0x100、0x101、0x102 和 0x103 位置。

二、两种通用规则——大/小端法

排列表示一个对象的字节有两个通用的规则。
考虑一个 w 位的整数,其位表示为 [ xw-1, xw-2, ……, x1, x0 ],其中 xw-1 是最高有效位,而 x0 是最低有效位。
假设 w 是 8 的倍数,这些位就能被分组成为字节,其中最高有效字节包含位 [ xw-1, xw-2, ……, xw-8 ],而最低有效位字节包含位 [ x7, x6, ……, x0 ],其它字节包含中间位。
某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储对象,而林一些机器则按照从最高有效字节到最低有效字节的顺序存储。前一种规则——最低有效字节在最前面的方式,称为小端法。后一种规则——最高有效字节在最前面的方式,称为大端法

例子
假设变量 x 的类型为 int,位于地址 0x100 处,他的十六进制值为 0x01234567。地址范围 0x100 ~ 0x103 的字节顺序依赖于机器的类型:
在这里插入图片描述
注意:在字 0x01234567 中,高位字节的十六进制值为 0x01,而低位字节值为 0x67。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值