您的位置:首页 > 其它

大端模式和小端模式的区别

2016-02-19 15:32 399 查看


1、什么是大端和小端?

1) 大端模式:就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2) 小端模式:是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78在内存中(假设从地址0x4000开始存放)的表示形式为:

内存地址小端模式存放内容大端模式存放内容
0x40000x780x12
0x40010x560x34
0x40020x340x56
0x40030x120x78




2、为什么要采用大端和小端?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为
8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL
C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。


3、怎么实现处理器是大端还是小端?

解题思想:用一个整型变量保存一个初值,然后在用一个指针指向这个变量的首地址,在判断指针首地址里面的值是否为0x12或者末尾地址里面的值,这样就可以判断出当前的机器是大端模式还是小端模式。



图1 程序源代码

其运行结果如图2所示:



图2 运行结果

从上面的输出结果可以看出,整型数a的高位放在较小地址里面,地址低位放在较大地址里面,所以也就看以判断出当前机器是大端模式了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息