版权声明:本文为博主原创文章,未经博主允许不得转载。

写这篇博客前请让博主先吐糟下自己的PC.

i3+2G内存+开了一上午=C盘剩下0字节+打开VS2012花了半个小时+一晚上的心情不好

吐槽完PC,再说下今天下午的面试。。

今天也真是囧的不行,面试的时候面试官带着我找会议室,结果发现每个会议室都有人在面试,无奈,最后在三楼的一个拐角处正好有个桌子,就开始了面试。。

面试官还是个女技术员,囧的来了,估计面试的公司对控制这块应用的比较多,而我大学接触到的控制,算法却比较少,我就讲着自己大学里做过的项目,基于STM32啥啥啥blablabla。。。,女技术员估计没接触过STM32,所以看起来也不知道我在说啥,完了就问我这个项目用的什么通信协议,我心想这下有的聊的,我就说uip协议,是一个短小精悍的嵌入式网络协议。。女面试官脸色又犯难了,我心想,卧槽,看来没听过uip协议啊,这没法聊了啊。。女技术员停顿了一会开始放大招了,问我,你接触过DSP吗?我就老老实实答说,上过这门课,做过简单的实验,但是没有深究,没用来做过项目。然后她又问,你知道modbus,我说知道,只是听过。。(因为这个也是我大学里逛论坛时看过的,但是没拿来研究过,只是知道有这么个通信协议),完了又问我知道can协议吗,我说知道,只是听过,我说完我自己都后悔,说实话,这也是以前逛论坛时看到的,也没哪来细究过。女面试官又停了会,我心想歇菜了,估计下一句就是回家等通知了吧(毕竟这是最完美的企业拒绝方式 : ))。女研究员站起来了,然后我也站了起来,女研究员又说,那个你先等会。然后她转身去了一个办公室,然后就听到她和一个男性在说话,过了一会出来后,跟我说,你进去跟我们技术总监聊下吧。技术总监?尼玛,快吓尿了啊,不过之前也是有多家面试经验了,于是我就故作淡定带着微笑的进去了,进去后,坐下来,技术总监并没有问我技术上的问题,反而问了好多人生理想,目标,职业规划的问题,说实话,我还真从来没准备过他问的那几个问题,也只能快速转着脑袋应对,聊了估计有好几十分钟,聊的也挺开心,最后也算是领悟到一些东西,也挺感谢他的。

好了,吐槽结束!

正文开始~~

今天这个面试题很简单,但是我花了好长时间去研究,主要也是被书中的作者解析误导,不然这篇博客也不会到现在还没写好(昨晚一晚上加今天一上午T_T)。

先贴代码~

 #include <iostream>
using namespace std;
int main ()
{
unsigned char a=0xa5;
unsigned char b=~a>>+;
printf("b=%d\n",b);
return ;
}

这里应该是考察两个概念:1.运算符号的优先级的问题.2.类型转换的问题。

类型转换的问题详见上篇博客。: )

对于算符的优先级问题,是先取反,还是先右移,还是先加?

好吧,其实我也不知道,但是汇编一定知道。: )

贴上反汇编代码~(只从主函数开始截)

 int main ()
{
002D436A push esi
002D436B push edi
002D436C lea edi,[ebp-0D8h]
002D4372 mov ecx,36h
002D4377 mov eax,0CCCCCCCCh
002D437C rep stos dword ptr es:[edi]
unsigned char a=0xa5;
002D437E mov byte ptr [a],0A5h
unsigned char b=~a>>+;
002D4382 movzx eax,byte ptr [a]
002D4386 not eax
002D4388 sar eax,
002D438B mov byte ptr [b],al
printf("b=%d\n",b);
002D438E movzx eax,byte ptr [b]
002D4392 mov esi,esp
printf("b=%d\n",b);
002D4394 push eax
002D4395 push 2DCC70h
002D439A call dword ptr ds:[2E03B8h]
002D43A0 add esp,
002D43A3 cmp esi,esp
002D43A5 call __RTC_CheckEsp (02D12D0h)
return ;
002D43AA xor eax,eax
}

第十条语句表示,将a5h填在[a]的一个字节处。12表示将[a]处的一个字节填到eax寄存器中,这里的movzx将eax扩展到了32位!而并非XX宝典中的16位!此时的eax为0x000000a5,13表示取反,eax为0xffffff5a,14表示右移,且高位不变,所以此时的exa为0xfffffffa,15表示将低八位填到[b]所在的一个字节处,也正是对应C中的赋值给一个unsigned char b变量发生字节截断,此时的b为0xfa,也就是十进制的250。

以上使用汇编语言解释,这样更容易理解,如果用C来解释的话是什么呢,根据C99标准中的“integer promotions”:在对a进行4移位时,会把a提升到整形,即四个字节,再赋值给unsigned char时又会发生字节截断。同样可以得到b的值为250。: )

关于C99中的”integer promotions“还有很多值得细究的东西,后面我会进一步学习。:)

an interview question(4)的更多相关文章

  1. an interview question(1)

    声明:本文为博主原创文章,未经博主允许不得转载. 以下是英文翻译: warnning: Copyright!you can't reprint this blog when you not get b ...

  2. Core Java Interview Question Answer

    This is a new series of sharing core Java interview question and answer on Finance domain and mostly ...

  3. shit LeetCode interview Question

    shit LeetCode interview Question https://leetcode.com/interview/1/ 有点晕,啥意思,没太明白,到底是要按什么排序呀? 去掉 标识符 不 ...

  4. JavaScript interview Question - Create a Array with two papameters without using loop!

    JavaScript interview Question - Create a Array with two papameters without using loop! JavaScript - ...

  5. An interview question from MicroStrategy

    去年校招时的一道面试题,觉得蛮有意思,贴出来. Question: Spy start at a, during an interval he moves |b| to right when b &g ...

  6. an interview question(3)

    最近看了些C面试题顺便复习一下C语言,现贴一些出来和大家分享. #include <stdio.h> void main () { ,,,,};--------- *(ptr++)+=; ...

  7. an interview question(2)

    感觉现在好多面试题还是很注重基础的,今天面试时就遇到这题,回来一查后才知道此题是国内某著名通信公司的一道机试题:) 给定一个数组input[ ],如果数组长度n为奇数,则将数组中最大的元素放到 out ...

  8. Interview Question

    HDS(11.16.2015): How to design an non-stop website like Google or Amazon? What design patterns are y ...

  9. Amazon Interview Question: Design an OO parking lot

    Design an OO parking lot. What classes and functions will it have. It should say, full, empty and al ...

随机推荐

  1. C++数组实现的循环队列

    #include<iostream> #include <string> /* 功能:数组实现的循环队列,C++实现,学习参考 */ using namespace std; ...

  2. C++之路进阶——HDU1880(魔咒词典)

    ---恢复内容开始--- New~ 欢迎参加2016多校联合训练的同学们~ 魔咒词典 Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 3 ...

  3. Windows Phone 五、配置存储

    基本存储形式 本地设置:ApplicationData.Current.LocalSettings 漫游设置:ApplicationData.Current.RoamingSettings 支持的数据 ...

  4. People Tools catalog tables.

    People Tools catalog tables. Projects PSPROJECTDEFN — Project header table PSPROJECTITEM — Definitio ...

  5. JAVA内存管理之堆内存和栈内存

    我们常常做的是将Java内存区域简单的划分为两种:堆内存和栈内存.这种划分比较粗粒度,这种划分是着眼于我们最关注的.与对象内存分配密切相关的两类内存域.其中栈内存指的是虚拟机栈,堆内存指的是java堆 ...

  6. 如何申请国际版Office365和Azure的试用账号

    关键字:国际版.Office365.Azure.试用账号.1美元.信用卡 待续

  7. eclipse 安装activity插件

    公司做流程需要用到流程插件,之前用了bpm4 activity是基于bpm4延伸的,这里先介绍下activity 插件是如何安装的 官网资料 *Name:*Activiti BPMN 2.0 desi ...

  8. C# 把背景为白色的图片变成透明图片

    Image Imageimage; Imageimage = System.Drawing.Image.FromFile(@"C:\A.JPG"); Bitmap bitmap = ...

  9. Angular初学

    简介: angularjs是基本js开发的一个前端类库,主要致力于减轻开发人员在开发Ajax应用过程中的痛苦,适合来做单应用. 客户端模板: Angualr中,模板和数据都会被发送到浏览器中,然后在客 ...

  10. 一场属于HTML5守望者的盛宴——记图灵参加HTML5峰会

    2013年8月,北京正是一个火热的季节.一场火热的盛会,HTML5 峰会如约来袭.这是一场属于 HTML5 守望者的盛宴!HTML5作为一项新兴的技术,其未来是光明的,但是道路却是曲折的.需要标准的不 ...