2.寻址和字节存储顺序

  • 对于多字节的程序对象,在几乎所有的程序上,都被存储为连续的字节序列,对象的地址为所使用的字节中最小的地址,例如,假设一个类型为int的变量x的地址为0x100,也就是&x的值为0x100。那么,x的4个字节将被存储在存储器的0x100、0x101、0x102、0x103。

  • 考虑一个w位的整数,位表示为[ xw1,xw2,...,x1,x0 ],其中 xw1 是最高有效位,而 x0 是最低有效位。假设w是8的倍数,这些位就能被分组成为字节,其中最高有效字节包含位[ xw1,xw2,...,xw8 ],而最低有效字节包含位[ x7,x6,...,x0 ]。某些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高有效字节到最低有效字节的顺序存储。最低有效字节在最前面的方式,称为小端法(little endian),最高有效字节在最前面的方式,称为大端法(big endian)。

  • 继续我们前面的示例,假设变量x类型为int,位于地址0x100处,它的十六进制表示为0x01234567。地址范围为0x100~0x103的字节,其排序依赖机器的存储规则。

大端法

0x1000x1010x1020x103
01234567

小端法

0x1000x1010x1020x103
67452301
判断机器大小端的方法

网上摘抄

1.#include <cstdio>  
2.int checkSystem()  
3.{  
4.    union check  
5.    {  
6.        int i;  
7.        char ch;  
8.    }c;  
9.    c.i=1;  
10.    return (c.ch==1);  
11.}  
12.int main()  
13.{  
14.    checkSystem()==1 ? printf("Little-endian/n") : printf("Big-endian/n");  
15.    return 0;  
16.}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值