大端和小端

Hello,地球人们,本篇博客主要分享关于大端和小端的知识,什么是 大端什么是小端?如何判断一个机器是大端机还是小端机?

一、大端小端概念
1、大端 big-endian也叫高尾端,将高序字节存放在起始位置。
例如字符串“11223344”
大端存放 11 22 33 44
低地址->高地址

2、小端 little-endian也叫低尾端,将低序字节存放在起始位置。
小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;
小端存放就是 44 33 22 11
低地址->高地址
二、大端机小端机的判别
1、大小端是字节序,大于一字节的整数,比如int,在内存中低字节在前就是小端,高字节在前就是大端,二者无所谓优劣,不过小端CPU较多,市场上大多数机器是小端机,x86/amd64/armel/mipsel,单前三者就占据了绝大多数的处理器市场,
大端的有,sun服务器上的sparc/sparc64,IBM高档机器上的Power,老式苹果机上的PowerPC和m68000等,还有传统的mips。
目前发展比较好大端机器也就是IBM Power以及高的利润率占据高端大型机市场,以及PowerPC在xbox360等一些游戏及市场还不错。

2、程序判断一个机器是大端机还是小端机

1int main(int argc, char** argv)
{
     union
     {
         short s;
         char c[sizeof(short)];
     }un;
     un.s = 0x0102;
     if (sizeof(short) == 2)
     {
         if (un.c[0] == 1 && un.c[1] == 2)//低地址存放的是高位字节内容&&高地址存放的是低位字节内容就是大端
         {
              printf("big-endian\n");
         }
         else if (un.c[0] == 2 && un.c[1] == 1)
         {
              printf("little-endian\n");
         }
         else
         {
              printf("un-known\n");
         }
     }
     else
     {
         printf("sizeof(short)=%d \n", sizeof(short));
     }
     //exit(0);
     system("pause");
     return 0;
}


//2、
union U
{
     char str[2];
     short int num;
}U;
int main()
{
     U.str[0] = 10;
     U.str[1] = 1;
     printf("%d\n ", U.num);
     system("pause");
     return 0;
}//VS2013编译器是小端机,所以低地址存放的是低字节的内容
//结果为266。对于整数类型,都是低字节存低位,高字节存高位,因此低位是10,高位是1,结果 = 1 * 256 + 10 = 266。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值