首先说明一下Little_endian和Big_endian是怎么回事。

Little_endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big_endian模式则是从高字节到低字节,比如32位的数0x12345678在两种模式下的存放如下:

Little_endian:

内存地址      存放内容

0x1000         0x78

0x1001         0x56

0x1002                           0x34

0x1003                           0x12

Big_endian:

内存地址      存放内容

0x1000           0x12

0x1001                           0x34

0x1002                           0x56

0x1003                           0x78

而联合体的存放顺序是所有成员都从地址值开始存放,于是可以通过联合体来判断。

#include <iostream>
using namespace std; int CheckCPU()
{
    union
    {
        int a;
        char b;
    }c;
    c.a = ;
    return (c.b == );
} int main()
{    
    if (CheckCPU())
    {
        cout<<"Little_endian"<<endl;
    }
    else
    {
        cout<<"Big_endian"<<endl;
    }     return ;
}

分析:

在联合体中定义了两个成员int和char,而联合体的大小=sizeof(int) = 4,于是在内存中占四个字节的大小,假设占用的内存地址为:0x1000——0x1003,当给a赋值为1时,此时将根据是Little_endian还是Big_endian来决定存放的内存地址。

如果是Little_endian,则

内存地址      存放内容

0x1000        0x01

0x1001                          0x00

0x1002        0x00

0x1003                          0x00

又因为联合体的成员都从低地址存放,于是当取0x1000里面的内容作为b的值,取得的是0x01,即b=1,函数返回值为1,说明处理器是Little_endian。否则,则是Big_endian。

转自:http://blog.chinaunix.net/uid-25132162-id-1641532.html

【转】判断处理器是Big_endian的还是Little_endian的的更多相关文章

  1. Endian.BIG_ENDIAN和Endian.LITTLE_ENDIAN(http://smartblack.iteye.com/blog/1129097)

    Endian.BIG_ENDIAN和Endian.LITTLE_ENDIAN 在ByteArray和Socket中,能看到一个属性endain. endian : String 更改或读取数据的字节顺 ...

  2. 请写一个C函数,判断处理器是大端存储还是小端存储,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1

    [解答] int checkCPU() { { union w { int a; char b; }c; c.a=1; return (c.b==1); } } [剖析] 嵌入式系统开发者应该对Lit ...

  3. C/C++ 笔试题

    /////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...

  4. C/C++程序员应聘试题剖析(转载)

    转载自:http://www.cnitblog.com/zouzheng/articles/21856.html 1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面 ...

  5. 李洪强iOS经典面试题128

    1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEnco ...

  6. iOS 最全面试题

    HTTP/1.0 在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP ...

  7. iOS 面试题及答案

    1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEnco ...

  8. 史上最全的iOS面试题及答案

    迷途的羔羊--专为路痴量身打造的品牌.史上最精准的定位.想迷路都难!闪电更新中...敬请期待,欢迎提意见.下载地址:https://itunes.apple.com/us/app/mi-tu-de-g ...

  9. C/C++笔试题(很多)

    微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...

随机推荐

  1. Linux 检查 外部设备 是否存在

    以 USB 为例,如果移植了udev,那么在usb插入的时候,/dev下面会出现usb有关的设备,同时,自动挂载到文件系统的某个节点 如果以文件系统usb对应的挂载点来检测USB是否插入,是不够严谨的 ...

  2. jsp页面的共用

    我们经常希望一个网页,根据不同得请求显示不同得数据. 方法就是在session中添加一个变量,根据不同得值区分不同得请求类型. 后台:request.getSession().setAttribute ...

  3. springcloud 服务调用的两种方式

    spring-cloud调用服务有两种方式,一种是Ribbon+RestTemplate, 另外一种是Feign.Ribbon是一个基于HTTP和TCP客户端的负载均衡器,其实feign也使用了rib ...

  4. HDU - 6357 Hills And Valleys(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=6357 题意 给一个数值范围为0-9的a数组,可以选择翻转一个区间,问非严格最长上升子序列,以及翻转的区间. 分析 ...

  5. Tomcat下载,及环境变量配置

    首先,介绍一下Tomcat: Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公 ...

  6. 【python小练】0012题

    第 0012 题: 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好 ...

  7. 第27月第28天 iOS bundle

    1. 7.如果将自己打包的bundle给别人使用,别人在打包上传过程中可能会遇到错误提示如: ERROR ITMS-90171: "Invalid Bundle Structure - Th ...

  8. Python 获取文件中最长行的长度和最长行

    1, 使用文件 #vim /etc/motd "1 hello world" 2 ...... yes 3 no you are a shadiao 4 hahh maye you ...

  9. 基于netty实现单聊、群聊功能

    学习资料 https://juejin.im/book/5b4bc28bf265da0f60130116/section/5b6a1a9cf265da0f87595521 收获: 转载 1. Nett ...

  10. 前端开发者不得不知的es6十大特性(转)

    转载自AlloyTeam:http://www.alloyteam.com/2016/03/es6-front-end-developers-will-have-to-know-the-top-ten ...