c/c++/objective-c对于大端小端的判断分析

来源:互联网 发布:linux 启动ftp服务 编辑:程序博客网 时间:2024/05/21 11:08

大端小端和CPU有关

对于一个int型的整数0x12345678


大端 

低地址 -> 高地址
0x 12 34 56 78
高位        低位


小端
低地址 -> 高地址
0x 78 56 34 12
低位        高位


存放字节的顺序不同


(字节内部完全相同)


// 若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
void checkCPU()
{
   {
   union w
   {
      int a;
      char b;
   } c;
   c.a = 1;
   printf("%d", c.b == 1);
   //return (c.b == 1);
   }
}


大端:
==================
int 
低地址 ->   高地址
0x 00 00 00 01
高位        低位


char

0x 01

不相等,一个是0x00 一个是0x01

===================






小端:
==================
int 
低地址 ->   高地址
0x 01 00 00 00
低位        高位


char
0x 01

相等,都是0x01

===================


对于 << 和 >> 的理解

这两个符号对应这样的存储位置:

//  高位<-低位
//    >>  [7][6][5][4][3][2][1][0] <<

n 的存储方式为  [7][6][5][4][3][2][1][0] 

n << 2 移动后:

[5][4][3][2][1][0][  ][  ]

因此整个数字变大了