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

大端小端和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][  ][  ]

因此整个数字变大了



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值