zoukankan      html  css  js  c++  java
  • (转)C系程序员面试必知必会之大端小端

      C程序员经常被问及的一道面试题是:什么是大端/小端,怎么样判断是大端/小端?大端小端问题对于嵌入式程序员绝对不会陌生(否则,别告诉我你是搞嵌入式的),它与CPU体系结构有关。比如常见的X86处理器是小端模式;ARM处理器默认是小端模式,当然也可以通过配置,改为大端模式;Moto的68000、DEC的SPARC是大端模式。

    1.什么是大小端?

    定义:一个内存对象由多个字节组成;同时,内存存放字节数据由低地址到高地址方向增长;

    那么,待存放的内存对象的低地址字节先存放,即:内存对象的低地址字节存放在内存 的低地址,就是小端模式。反之,内存对象的高地址字节存放在内存的低地址,就是大  端模式。

    概念乍看很简单,但是不真正理解的话,很快就会遗忘,容易混淆。看图:

    int a=0x01020304 的存储为例。

    2.判断是大端还是小端。

    判断方法很多,这里给出一个简单又常用的方法。——利用C语言里的联合体union

    联合体中的域值是共用内存的。故,一个联合体的大小以其中包含最多字节的域的大小为大小。

    如:

    typedef union{

    int i;//sizeof(int)==4

    char c;//sizeof(char)==1

    }utest;//sizeof(utest)==4

    utest u;

    u.i=1; // 1的十六进制表示为0x00000001

     

    c程序如下:

       1:  #include <cstdio>
       2:  #include <cstdlib>
       3:   
       4:  typedef union {
       5:      int   i;
       6:      char  c;
       7:  }utest;
       8:   
       9:  int main(int argc,char *argv[])
      10:  {
      11:      utest u;
      12:      u.i=1;
      13:      printf("输出为1是小端,输出为0是大端!输出为[ %d ]
    ",u.c);
      14:      return 0;
      15:  }
  • 相关阅读:
    C#获取当前程序运行路径的方法集合
    SQL为查询的结果加上序号(ROW_NUMBER) 合并多个查询结果
    Asp.net导出excel时长数字被科学计数法的解决方案。(身份证长数字作为字符处理)
    Stopwatch的用法
    对web.config的ConnectionString加密
    如何检索数据库中的空值和null
    如何将闲置的平板作为第二显示器(分屏)使用
    pyinstaller 打包文件太大
    如何让openssl生成的SSL证书被浏览器认可
    还是那该死的IE~~~
  • 原文地址:https://www.cnblogs.com/woainilsr/p/3203234.html
Copyright © 2011-2022 走看看