不要小看 b=~a4
问题的提出:
unsigned char a=0xA5;
unsigned char b=~a>>4;
注意~优先级高于>>,按照逻辑b应该为0x05
而结果b=0xf5,有点不符合逻辑,反编译(VC6,32位)看了一下,发现编译器把上面的代码编译成
mov ecx, dword ptr[ebp-8] ;ecx = 0xcccccca5
and ecx, 0ffh ;ecx = 0x000000a5
not ecx ;ecx = 0xffffff5a
sar ecx, 4 ;ecx = 0xfffffff5(注意移位后用1补齐!!!)
mov byte ptr [ebp-10h], cl ;cl = 0xfff5
反思一下,为了完成b=~a>>4,编译器做了三个工作
(1)申请了一个32位的临时变量x,将a扩展后,存入x
(2)将x取反
(3)将x右移4位,并将移位后x的低8位送给b
在第一步中,存在一个是否按符号位扩展的问题,这里a为unsigned型,不需要扩展,所以x = 0x000000a5;
若a为(signed) char型,则按符号位扩展后,x =0xffffffa5,取反后x = 0x0000005a,最终b=0x05。
下面在看一下关于符号位扩展的反编译代码
unsigned char a1 = 0xA5;
int a2 = a1;
这里扩展不需要补1,应为a1是unsigned类型的,所以编译器将上面代码译为
mov byte ptr [ebp-4], 0A5h
mov eax, dword ptr [ebp-4]
and eax, 0FFh ;eax = 0x000000a5
mov dword ptr [ebp-18h], eax
对于下面的c代码,需要进行符号位扩展
char a1 = 0xA5;
int a2 = a1;
反编译后,可以看到一条movsx带符号扩展指令
mov byte ptr [ebp-4], 0A5h
movsx eax,byte ptr [ebp-4] ;eax = 0xffffffa5
mov dword ptr [ebp-18h],eax
不要小看 b=~a4相关推荐
- 太酷啦!我在A4纸上看宫崎骏动画
转载自:量子位 随意弯曲.任意抖动,丝毫不影响我在纸上看<龙猫>. 这不是什么屏幕黑科技,而是AI合成的图像. 来自港中文-商汤联合实验室.浙江大学.英伟达的研究人员,用AI将图片视频投影 ...
- 我在A4纸上看宫崎骏动画
杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 随意弯曲.任意抖动,丝毫不影响我在纸上看<龙猫>. 这不是什么屏幕黑科技,而是AI合成的图像. 来自港中文-商汤联合实验室.浙江 ...
- 【Arduino】利用FDC2214加LCD1602电容计测量A4纸张数量
/** 名称:2019年全国电赛F题* 功能:极板电容测量A4纸张数量*/ #include <LiquidCrystal.h> const int rs = 7, en = 6, d4 ...
- 计算机视觉与模式识别(1)—— A4纸边缘提取
转载自:http://blog.csdn.net/simba_scorpio/article/details/50974351 最近跟着老师学习了计算机视觉领域中,一个教科书般的知识点 -- 图形的边 ...
- 一张A4纸的牛B变化(你能吗?)
原材料:A4纸 大家有兴趣也来做一下吧?其实不难的,不妨试一下? 转载于:https://www.cnblogs.com/hylan/archive/2008/11/28/1342768.html
- php制表网页打印到a4纸,A4纸网页打印 html网页页面的宽度设置成多少
最近开发项目时遇到了网页打印的问题,这是问题之二,打印宽度设置 在公制长度单位与屏幕分辨率进行换算时,必须用到一个DPI(Dot Per Inch)指标. 经过我仔细的测试,发现了网页打印中,默认采用 ...
- Python也有做大型游戏的潜力?原来我们小看了Python,无所不能!!
前言 在小编以前还没怎么接触很多编程语言时,都是认为游戏(端游,手游)都是用C做出来了!不知道大家有没有这么想过,反正我是这样的.后来慢慢接触多了,才知道并不是所有的都是这个样子的! 学习python ...
- elxel表格纸张尺寸_纸张知识|克重厚薄多少,正度大度纸开本尺寸规格是什么大小,和A4有啥区别?...
什么是大度纸,正度纸? 大度正度是印刷业定义纸张尺寸的规格名称."度"即为纸张的度量."正"即为标准正规之意.纸张有国际标准和国内标准.国内标准的全开尺寸为10 ...
- How to show out three rows from the same databand On A4?
How to show out three rows from the same databand On A4? Quote Post by DoraHuang » Tue Mar 13, 2018 ...
最新文章
- .NET设计模式(15):结构型模式专题总结
- 围住浮动元素(消除浮动)的三种方法
- 财物机器人英文ppt演讲课件_“如何恰当使用课件动画”
- Refusing to install package with name “vue-i18n“ under a package
- python列表、字典、元组的用法及区别_python列表,字典,元组简单用法示例
- python字典在编程中的作用_python中的字典操作及字典函数
- The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in u
- ContestHunter暑假欢乐赛 SRM 03
- [转][Android]Android数据的四种存储方式
- 图像频域增强:带通带阻滤波器
- 闲谈Python语言入门
- c# winform word模板 利用WORD 书签 定位替换 生成 WORD
- selenium获取html源代码
- 发送的邮件还能撤回吗?如何撤回已经发出的邮件?
- 集合collection
- 我的HTML学习------表格的基本使用
- Excel图表—波士顿矩阵分析图(四象限图)
- python 圆周率代码_基于Python计算圆周率pi代码实例
- 使用Arduino开发板控制伺服电机
- mPEG-SCM 甲氧基PEG琥珀酰亚胺乙酸酯
热门文章
- 音频卡拉OK,TYPEC声卡芯片
- 百炼智能店店通数据:2020年下半年餐饮行业闭店率超30%
- w7无法訪问计算机上硬盘分区,惠普笔记本win7系统无法调整硬盘分区的解决方法...
- w7计算机新加,win7系统新加硬盘分区的详细步骤
- 项目13 路由器与网桥的设置
- 错误处理(二)—— Exception from HRESULT: 0x800A03EC
- 微信小程序宠物论坛6
- itertools模块中的product方法
- VS2010 MFC通过OLE方式读写Excel文件(实例+工程文件)
- 数据懒加载和图片懒加载