c语言课程设计体测系统,C语言面试题——联合体测cpu的大小端 .

#include

int checkCPU();

int main()

{

int a=1;

char * p=(char*)&a;

if(*p==1)

printf("Little edian\n");

else

printf("Big edian\n");

int ret = checkCPU();

printf("%d\n", ret);

return 0;

}

int checkCPU()

{

union w

{

int a;

char b;

}c;

c.a = 1;

return (c.b == 1);

}

上面的一个就是用来测试cpu的大小端的函数,首先联合的概念要弄清楚,可以保存不同类型和长度的变量,编译器负责跟踪对象的长度和对齐要求,并且是在单块存储器中管理不同类型的数据的。上面的联合w在内存的分布如下:

0818b9ca8b590ca3270a3433284dd417.png

这个不管是在大端还是小端都是这么存储的,接下来就是数据的存放了,还记得“小高高,小弟弟(低低)”吗?c.a=1;编译器就把1写入联合体c中的a,于是在0x22ff44~0x22ff47的地址里写着:

0818b9ca8b590ca3270a3433284dd417.png

c.b:

0818b9ca8b590ca3270a3433284dd417.png

在gdb的调试里看到:

0818b9ca8b590ca3270a3433284dd417.png

一目了然了吧!~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值