an interview question(4)
版权声明:本文为博主原创文章,未经博主允许不得转载。
写这篇博客前请让博主先吐糟下自己的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)的更多相关文章
- an interview question(1)
声明:本文为博主原创文章,未经博主允许不得转载. 以下是英文翻译: warnning: Copyright!you can't reprint this blog when you not get b ...
- Core Java Interview Question Answer
This is a new series of sharing core Java interview question and answer on Finance domain and mostly ...
- shit LeetCode interview Question
shit LeetCode interview Question https://leetcode.com/interview/1/ 有点晕,啥意思,没太明白,到底是要按什么排序呀? 去掉 标识符 不 ...
- 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 - ...
- An interview question from MicroStrategy
去年校招时的一道面试题,觉得蛮有意思,贴出来. Question: Spy start at a, during an interval he moves |b| to right when b &g ...
- an interview question(3)
最近看了些C面试题顺便复习一下C语言,现贴一些出来和大家分享. #include <stdio.h> void main () { ,,,,};--------- *(ptr++)+=; ...
- an interview question(2)
感觉现在好多面试题还是很注重基础的,今天面试时就遇到这题,回来一查后才知道此题是国内某著名通信公司的一道机试题:) 给定一个数组input[ ],如果数组长度n为奇数,则将数组中最大的元素放到 out ...
- Interview Question
HDS(11.16.2015): How to design an non-stop website like Google or Amazon? What design patterns are y ...
- 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 ...
随机推荐
- 谈谈LoveLive SIF以及即将诞生的LL练习器
由于课程需要和自身需求以及广大的LLer的需求,这个学期我将做一个造福全世界LLer的安卓app,它的名字是——还没想好(喂),总之是个LL SIF的练习器.什么?你问我LL SIF是什么?看来你不是 ...
- Android 蓝牙API详解
随着近两年可穿戴式产品逐渐进入人们的生活,蓝牙开发也成为了Android开发的一个重要模块,下面我们就来说一说蓝牙的这些API. 1.蓝牙开发有两个主要的API: BuletoothAdapter:本 ...
- sed tr 去除PATH中的重复项
最近发现由于自己不良的安装软件的习惯,shell的PATH路径包含了很多冗余的项.这里使用shell命令去除PATH的冗余项. export PATH=$(echo $PATH | sed 's/:/ ...
- (最重要)学了这么久的编程,你知道byte吗?
在c#中,Byte b=12; 上面是合法的,因为Byte是一个字节.他的范围是0-255. 如果是 Byte b=4096;这是错的 ,必须加上强制类型转换. 这个小问题,虽然很小但是值得注意.
- CocoaPods和git
CocoaPods是第三方框架的管理工具 CocoaPods 安装使用步骤: 1. 利用 gem 安装 CocoaPods! 1> gem 服务器在国外,提供了非常丰富的终端应用程序! gem ...
- 3173: [Tjoi2013]最长上升子序列
原题:http://www.lydsy.com/JudgeOnline/problem.php?id=3173 题解:促使我写这题的动力是,为什么百度遍地是Treap,黑人问号??? 这题可以用线段树 ...
- PHPExcel导出功能
对于第一次弄这个导出,总结下思路: 1.下载在http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendo ...
- 深度系统deepin使用初体验
最近使用linux系统比较多,因为很多项目要用到,而且厌烦了windows流氓软件各种广告的繁琐,因此决定在自己的本子上安装linux系统.然后了解到了deepin操作系统,竟然是武汉一个公司发行的版 ...
- COUNT(1)和COUNT(*)区别
项目经常用到count(1),但是和count(*)什么区别? 从下面实验结果来看,Count (*)和Count(1)查询结果是一样的,都包括对NULL的统计,而count(列名) 是不包括NULL ...
- ip相关
查看ip ifconfig -a 查看端口占用 ps -aux | grep tomcat