大小端问题

来源:互联网 发布:网络公会白马义从 编辑:程序博客网 时间:2024/06/05 05:31

最近在刷题的过程中遇到好多关于大小端问题的题目

看得多了,有点把自己带入了一个思维误区,我可以很清楚的理解数据在大小端不同机器中的存储,可是在打印值时,越想越混乱,不知道该用怎样的语言来解释


在VS中验证,我用的是小端机器(在文章后面会有验证)


从这里可以看出78被存在低地址中

有两种方式可以验证机器是大端机器还是小端机器

(1)



联合体的内存大小为内部元素最大的内存,元素共用起始地址,且起始地址为低地址

c.ch只占联合体的一个字节的大小,也就是在i的最低地址处,打印结果为1,说明是小端机器

1在i中的位置为  0x 00 00 00 01      小端机器会将最低位存储在最低地址,转换为char打印时,只看到最低地址的一个字节打印结果为1

若是大端机器,则会将01存储在高地址,转换为char打印时,低地址此时存储的是00,所以会打印出0

(2)


例题:union X
{
int a;
struct
{
short b;
short c;
};
}x;
int main()
{
x.a = 0x20150810;
printf("%x,%x\n", x.b, x.c);
return 0;
}

在大端机器和小端机器下的输出分别是什么?

大端机器(可以说是按人的常规思维)

低地址                     高地址

20       15       08       10

所以按short两个字节打印结果为:2015,810

小端机器

低地址                     高地址

10        08       15        20

按short两个字节打印结果为:  810,2015

在我的vs下运行结果


前边已经验证过,我的机器为小端机器

0 0
原创粉丝点击