(一)C系程序员面试必知必会之大端小端

    C程序员经常被问及的一道面试题是:什么是大端/小端,怎么样判断是大端/小端?大端小端问题对于嵌入式程序员绝对不会陌生(否则,别告诉我你是搞嵌入式的),它与CPU体系结构有关。比如常见的X86处理器是小端模式;ARM处理器默认是小端模式,当然也可以通过配置,改为大端模式;Moto的68000、DEC的SPARC是大端模式。

1.什么是大小端?

定义:一个内存对象由多个字节组成;同时,内存存放字节数据由低地址到高地址方向增长;

那么,待存放的内存对象的低地址字节先存放,即:内存对象的低地址字节存放在内存 的低地址,就是小端模式。反之,内存对象的高地址字节存放在内存的低地址,就是大  端模式。

概念乍看很简单,但是不真正理解的话,很快就会遗忘,容易混淆。看图:

int a=0x01020304 的存储为例。

2.判断是大端还是小端。

判断方法很多,这里给出一个简单又常用的方法。——利用C语言里的联合体union

联合体中的域值是共用内存的。故,一个联合体的大小以其中包含最多字节的域的大小为大小。

如:

typedef union{

int i;//sizeof(int)==4

char c;//sizeof(char)==1

}utest;//sizeof(utest)==4

utest u;

u.i=1; // 1的十六进制表示为0x00000001

 

c程序如下:

 

#include <cstdio>
#include <cstdlib>

typedef union {
	int   i;
	char  c;
}utest;

int main(int argc,char *argv[])
{
	utest u;
	u.i=1;
	printf("输出为1是小端,输出为0是大端!输出为[ %d ]\n",u.c);
	return 0;
}


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值