所谓的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");
}