昨天在牛客刷到的一道题
如果在地址a存储的整形值时0x04030201,那么地址为a+3的字节内存储的值在big-endian和little-endian结构下的值分别是?
endian这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
我们一般将endian翻译成–字节序,将big endian和little endian称作“大端”和“小端”
对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)。
- Little-endian:将低序字节存储在起始地址(低位编址)
- Big-endian:将高序字节存储在起始地址(高位编址)
例子1:在内存中双字0x01020304(DWORD)的存储方式。
内存地址 4000 4001 4002 4003 LE 04 03 02 01 BE 01 02 03 04
注:每个地址存1个字节,每个字有4个字节。2位16进制数是1个字节(0xFF=11111111)
例子2:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x23 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
一般来说,x86 系列 CPU 都是 little-endian 的字节序,PowerPC 通常是 big-endian,网络字节顺序也是 big-endian还有的CPU 能通过跳线来设置 CPU 工作于 Little endian 还是 Big endian 模式。
非常简单的概念 还是记一下