面试每日总结(3月30日)

    开始找工作了,去面试的过程暴露了自己的很多问题,因此打算总结一下,毕竟这个也是一个学习的过程。

    这次面试的是潮流网络,职位是嵌入式开发工程师,之前没有做过这个,不过面试题目还好,下面我把还记得的题目列举出来大家参考下,都是比较基础的题目。 

 

    1.用宏定义2个数a b的比较结果,返回小的那个。

    2. 也是比较基本的就是一堆让你写数组和指针的声明。

    3.写代码,获取键盘输入2个浮点数,再打印出它们的积。

    4.给你一个整形数a,写出改变a的bit 3的操作和清楚bit 3的操作。

    5. volatile的作用是什么,因为是做嵌入式的,可能有些作用我不知道。

    6.指针和数组的区别?用一个声明反应他们的区别,还有一问忘记了。

    7.linux的socket和windows下的WinSock的共同点是什么,从C++的角度说出最少3点他们的区别。

    8.你看过的5本C方面的书以及简评。

    9.如何判断一个板子是big-endian还是little-endian?判断出结果后如何转换,写出2个转换函数。

 

大概就这么多题目吧,可能漏了2个我自己也没什么印象了,基本比较基础,只是最后一个平时没有怎么接触到,判断大小端我倒是知道,但是写出转换函数倒没有写过,因为没有做过嵌入式,只是在网络传输中间了解这方面的东西,socket本身提供了函数来转换,因此一时没有想起来怎么解决,查找资料后了解了下,这里详细解答一下,留作自己的记录。

  1 #include <stdio.h>

 2  #include  < stdlib.h >
 3  #include  < assert.h >
 4  int  main( void )
 5  {
 6       unsigned  short   int  i  =  (unsigned  short   int ) 0XFF01 ;
 7       assert( sizeof ( short   int >=   2 );   //  判断具体编译器设定的short int类型的长度
 8        if  ( * (( char   * ) & i)  ==   1 )
 9           printf( " Little-Endian: 数据的低字节部分存储在内存的低地址处\n " );
10        else
11           printf( " Big-Endian: 数据的低字节部分存储在内存的高地址处\n " );
12       system( " pause " );
13        return   0 ;
14  }

 

 

这个就是正常的方法了,不过还有强人发了另外一种方法,这里我也记录下来:

 

 1  int  checkCPU() 
 2 
 3 
 4    union w 
 5    {   
 6      int   a; 
 7      char  b; 
 8    } c; 
 9    c.a  =   1
10     return  (c.b  ==   1 ); 
11 
12 

 

剖析: 
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
内存地址 0x4000 0x4001
存放内容 0x34 0x12
而在Big-endian模式CPU内存中的存放方式则为:
内存地址 0x4000 0x4001
存放内容 0x12 0x34
32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x78 0x56 0x34 0x12
而在Big-endian模式CPU内存中的存放方式则为:
内存地址 0x4000 0x4001 0x4002 0x4003
存放内容 0x12 0x34 0x56 0x78

联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性,轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。

 

 

 

 

转载于:https://www.cnblogs.com/thepiece/archive/2010/03/31/1701343.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值