Big-Endian 和 Little-Endian

端模式(Endian)这个词可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。
1981年10月,Danny Cohen的文章《论圣战以及对和平的祈祷》(On holy wars and a plea for peace)将这一对词语引入了计算机界。这么看来,所谓大端和小端,也就是big-endian和little-endian,其实是从描述鸡蛋的部位而引申到计算机地址的描述,也可以说,是从一个俚语衍化来的计算机术语。

                                        ——Cyberspace_TechNode_五岳的博客

1、大端和小端的含义

1)大端(Big-Endian)就是高位字节排放在内存的低地址端。
2)小端(Little-Endian)就是低位字节排放在内存的低地址端。
在裘宗燕翻译的《程序设计实践》里,将之翻译“高尾端”和“低尾端”。那么根据这个解释,我们就可以很容易理解。假如把一个32位的整数0x12345678存放到一个整形变量(int)中,我们把0x12345678看作一个字符串“12345678”,那么在内存中的放法就如图所示:
这里写图片描述
相对于“ 大/小“端,”高/低“尾端可能更好理解,但是很凑巧的是,“高”对应“大”,“低”对应“小”;这样就很好记忆了。

(数据看作字符串) 大端——高尾端,小端——低尾端

2、大小端相关

1.为什么会有大小端之分?

在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short,32bit的long(和编译器也有关),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端储存模式和小端储存模式。

2.如何判断机器是大端还是小端

#include<stdio.h>

int main(){
    int a = 0x1234;
    char b = *(char*)&a;    //强制转换为char单字节,通过判断起始位置,即b为a的低地址部分
    if (b == 0x12)
        printf("Big-Endian\n");
    else
        printf("Little-Endian\n");
    return 0;
}

以上就是我搜索资料后,对大端小端的一点粗浅的看法,以后可能会有更详细的理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值