大端模式与小端模式

大端模式与小端模式

有时候,用C语言写程序时需要知道是大端模式还是小端模式。

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

高数据位与低数据位

inta=46178;

00000000 0000 0000 1011 0100 0110 0010 二进制

左侧是数据高位,向右依次降低。

重点在理解这个高低位

4字节内存地址

 


这是一个整型4字节内存,a要存在这段内存中,内存地址顺序递增,由低地址位 递增 到高地址位。

 

大端存储:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中;

 

误区:数据不是原模原样存进去,是按二进制形式存储的。

比如:int a=46178;不是1占一个字节,2占一个字节,3占一个字节,4占一个字节。

 

小端存储:(小高高,小低低),字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中;

 

测试我们系统大小端的存储方法:思路就是看第一个字节的值是多少。一般使用联合体测试。

联合体特点:所有成员起始地址一致,所有成员引用的是内存中的相同位置。

测试用例

#include<stdio.h>

#include<windows.h>

/

//大端模式与小端模式测试

///

int main()

{

    //(方法1)联合体

    union

    {

       inta;

       chararray[4];

    }b = {46178 };

    printf("%d,%d,%d,%d", b.array[0], b.array[1], b.array[2],b.array[3]);

    //(方法2)法类型转换

    inta = 46178;

    char*p = (char*)&a;

    printf("%d,%d,%d,%d",*p,*(p+1),*(p+2),*(p+3));

    //方法1与方法2运行结果: 98,-76,0,0

    //数据的低数据位放在内存的低地址,故本机器为小端模式存储

    //X86一般为小端存储

    system("pause");

    return0;

}

测试函数

int CheckSystem()

{

    union check

    {

       inti;

       charch;

    }c;

    c.i = 1;

    return(c.ch == 1);

}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值