关于Big-Endian和Little-Endian

所谓的Little-Endian,就是我们在学习汇编时候的高高低低原则,而Bit-

Endian就是刚刚相反,例如:12345678h这个数据,在不同机器中存储是不同的

          Big-Endian              Little-Endian

0字节     12h                         78h

1字节     34h                         56h

2字节     56h                         34h

3字节     78h                         12h

Little-Endian主要用在我们现在的PC的CPU中(x86系列),Big-Endian则应用在

目前的Mac机器中(注意:是指Power系列处理器).

面试题目:


1.

int   a[]={10,20,30,40};
short   *p,*q;
p=(short*)(a+1);
q=(short*)a;
a[p-q]=?

 

解答:
int型,每个元素占4个字节
short型,每个元素占2个字节
a为int型数组,因为(a+1)与a差一个int型步长,即4个字节(设a的地址为x,

则a+1=x+4)
p,q为short型,每个步长为2个字节,即走4个字节需要走2步,即p-q=2
所以a[p-q]=a[2]=30

指针相减的值(每步的步长),取决于其类型。
步长=地址的差值/sizeof(类型)=(地址1-地址2)/sizeof(类型)
char *p,p++:p每次走一个字节(在sizeof(char)=1的机器上)
short *p,p++:p每次走两个字节(在sizeof(short)=2的机器上)

 

2.

//=====================================
//   测试是big endian 还是 little endian
//=====================================
#include <stdio.h>
static union
{
  char c[4];
  unsigned char l;             

} endian_test = {{'l','?','?','b'}};
#define ENDIANNESS ( (char)endian_test.l )
int main()
{
    if (ENDIANNESS == 'l')           

        printf("Little-Endian/n");
    else
        printf("Big-Endian/n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值