c语言共用体什么样有大小端问题,小议大小端模式对C语言的共用体结构的影响...

该博客探讨了如何通过union来检测CPU的小端或大端模式,并展示了不同数据类型在内存中的存储方式。示例代码展示了将int和long类型的数值转换为char数组并打印,揭示了数值在内存中的字节布局以及负数在计算机中的补码表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int checkCPU()

{

union

{

int a;

char b;

}c;

c.a = 1;

return (c.b == 1); // 小端返回TRUE,大端返回FALSE

}

这个就不详细解释了,用来判定CPU大小端模式的一个经典例子。

问题4

union {

int a[2];

long b;

char c[4];

}s;

main()

{

s.a[0]=0x12345678;

s.a[1]=0x23456789;

printf("%lx\n",s.b);

printf("%x,%x,%x,%x\n",s.c[0],s.c[1],s.c[2],s.c[3]);

}

答案是:

12345678

78,56,34,12

问题5

# include

main()

{

union {

long i;

int k;

char ii;

char s[4];

} mix ;

mix.k=0x23456789;

printf("mix.i=%lx\n",mix.i);

printf("mix.k=%x\n",mix.k);

printf("mix.ii=%x\n",mix.ii);

printf("mix.s[0]=%x\tmix.s[1]=%x\n",mix.s[0],mix.s[1]);

printf("mix.s[2]=%x\tmix.s[3]=%x\n",mix.s[2],mix.s[3]);

return 0;

}

答案是:

mix.i=23456789

mix.k=23456789

mix.ii=ffffff89

mix.s[0]=ffffff89 mix.s[1]=67

mix.s[2]=45 mix.s[3]=23

出现f是因为把char型强制转换成int型输出,0x89最高位1000 1001最高位为1,转换为int类型的时候认为是负数,而且数在计算机中是按补码存储的,所以自然高位补1了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值