关闭

big endian 和 little endian 个人理解

标签: 二进制计算机内存指针
889人阅读 评论(0) 收藏 举报
分类:

最近接触到 endian 的问题,对big  endian  和little endian  两者理解不是很深,特地花了点时间对其进行整理,特将总结记录下来。


我们知道 int  数据类型 在内存当中是占据4 字节的 (32 位)。 多字节数据(当然包括int 数据类型)在内存当中时顺序存储的。链表除外。

int  A=1;
int  B=2;
B1  B2  B3  B4     ~    Bn+1  Bn+2 Bn+3  Bn+4
     A  		           B

这是A  ,B 数据在内存当中的存储方式。由此产生两个问题。

Q & A

问题一     &A  ,  &B  的地址值是多少?

问题二   A  和 B 的数据值(二进制码) 在这四个字节当中又是如何组织的呢?

问题一,其实很好解答,不论在 big endian  还是在little  endian  当中, 不论是在windows(little) 下 还是在 MAC(big ) 所获取的地址的方式都是首选地址 

&A     == B1
&B     == Bn+1

在解决问题一的基础上, 再来解决问题二相对好理解多了。 

int   A =0X11223344;

在我们传统思维里,其而二进制 码应该为     (大) 11  22  33  44  (小)

但是这并不一定代表着其内存组织方式也会同样如此。由此也就引出了 big  little  endian  的问题

让我们先看结果:

little  endian
int A=0X11223344 映射方式
B1    B2    B3       B4 
0X44  0X33  0X22    0X11 , &A  指针所指向B1 地址值。
---------------------------------------------------- 
big endian
int A=0X11223344 映射方式
B1   B2    B3       B4   
0X11 0X22  0X33    0X44 ,&A 指针所指向B1 地址值

结论:
big endian  指针所指向  大头(高位), 即数值较大的地址值 
little endian  指针所指向 小头(低位), 即数值较小的地址值 

某种程度上讲  big endian 更符合我们对传统二进制的认知。 little endian优先取地位值的方式对于计算机运算或许会更加便捷(个人看法,尚未验证O(∩_∩)O)


编程区分 big endian  和 little endian 

unsign int   A =0x1122;
if((*(unsign int &A))==0X11)
	return  true;    // big endian 
else 
       return  false;    // little endian
// end 








   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:141009次
    • 积分:1933
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:19篇
    • 译文:1篇
    • 评论:14条
    最新评论