iOS面试相关

大端小端

2015-11-30  本文已影响101人  河小龙
  • 大端:
* 数据的<u>**低**</u>位保存在内存的**高**地址中,
* 数据的<u>**高**</u>位保存在内存的**低**地址中。

上面是大小端的定义。定义总是枯燥的,下面来说下我对大小端的理解

为什么要分大小端(Big-endian / Little-endian)?

名称的来由

一个多字节的数据,比如int,long, 暂且先将高位叫大端,低位叫小端吧。于是有人做了一个机器,他说,“我这款机器先放大端”,比如ox1234, 先放0x12(大端),再放0x34(小端)。

另有一人做了一款机器,他说,“我的机器先放小端”,比如0x1234, 先放0x34(小端),再放0x12(大端)。

根据存放顺序,市面上就出现了两种类型的机器,分别叫做“先放大端模式”的机器,和“先放小端模式”的机器。后来就简称“大端”和“小端”了。

其实,只需要知道这背后是在说一种优先顺序就可以了。

看一款机器是大端还是小端

大端”还是“小端”是由做机器那个人决定的,一台机器做好,大小端就确定了。

为什么这么说呢? 一款芯片有它确定的指令集,所有高级语言最后都被翻译为指令集,大小端决定指令集最后怎么被翻译成电信号。

所以说,不能说c语言采用了大端,java用的小端,因为那是机器本身决定的。

看机器是大端还是小端非常简单,只需要:

下面列出c语言代码:

#include<stdio.h>

int main(void)
{
    int a = 0x1;

    if (*(&a) == 1) {
        printf("little endian\n");
    } else {
        printf("big endian\n");
    }

    return 0;
}

在我的机器上打印:little endian

上一篇下一篇

猜你喜欢

热点阅读