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

写这篇博客前请让博主先吐糟下自己的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. 无限分页//////////////zz

    由于网页的执行都是单线程的,在JS执行的过程中,页面会呈现阻塞状态.因此,如果JS处理的数据量过大,过程复杂,可能会造成页面的卡顿.传统的数据展现都以分页的形式,但是分页的效果并不好,需要用户手动点击 ...

  2. Windows Phone 十八、加速计

    加速度传感器 手机的加速度传感器工作时是通过 x.y.z 三个轴的偏移来计算的 在代码基本的 API 主要集中在 Accelerometer 类型中 主要是使用该类型的对象捕获 ReadingChan ...

  3. eclipse中搭建svn开发管理环境

    1.准备好资源 subversive,若是离线安装,已为大家准备好:http://pan.baidu.com/s/1hrbXH9y(本人喜欢离线安装,在线安装就不在此说了,其实只要一种方法简单的方法能 ...

  4. Win7+Eclipse+Hadoop2.6.4开发环境搭建

    Hadoop开发环境搭建 感谢参考网站:http://www.cnblogs.com/huligong1234/p/4137133.html 一.软件准备 JDK:jdk-7u80-windows-x ...

  5. timus 1180. Stone Game 解题报告

    1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...

  6. 给linode 替换操作系统核心

    1.Make sure your package repositories and installed packages are up to date by issuing the following ...

  7. php常用array函数

    http://www.w3school.com.cn/php/php_ref_array.asp 1.array_change_key_case() 把数组中所有键更改为小写或大写2.array_ch ...

  8. 点击区域外隐藏该区域,event.stopPropagation()

    event.stopPropagation() Description: Prevents the event from bubbling up the DOM tree, preventing an ...

  9. Bash:-3次错误输入退出脚本

    Limit_Condition() { let count++ ]];then echo "超过3次机会,自动关停脚本" exit fi Comfirm() { count= wh ...

  10. tinyshop框架教程已在腾讯课堂开课

    php就业网简介:www.php91.net,专注于Thinkphp框架教程的php框架学习中心.同时也有小崔老师自学php的教程,与你一起成长哦 同时,php就业网教程部分:http://www.p ...