有符号非2的幂的第一种优化
这样就把除法转换为被除数x乘以一个整数,再右移n位的形式,但是有一个问题,因为右移n位是取下整
右移n位是取下整 例子:
-3/2 = 0xFFFFFFFD / 2 =0xFFFFFFFD >> 1 = 0xFFFFFFFE = 0xFFFFFFFE.1 = -2
由于小数位1被舍去了,所以负数扩大了。
回到正题,当被除数是正数时,自然没问题,但是当被除数是负数时要向上取整才能得到正确的计算结果,所以要在被除数是负数时将去下整转换为去上整
首先将变得略大一些,这样c就会比实际的除数略小一些,能这样做的原因是因为书上的推导6
有整数a,b和实数x且a
由于c比实际的除数略小于,除数为整数,所以c不等于整数(当a$ \neq 0 \neq b,b\neq0\frac{x}{c}$比实际的值略小,所以才满足上面公式
又因为推导3
当x不为整数
由于c不为整数,所以也不为整数,满足上述公式,所以有下面的推导:
最终得出除数为有符号非2的幂的优化
当x>=0
因为x>0,c比实际的除数略小,所以比实际的值略大,满足当
注:右边的c要比实际的除数略小
当x<0
参考书籍:C++反汇编与逆向分析技术揭秘 第二版
本文作者:乘舟凉
本文链接:https://www.cnblogs.com/czlnb/p/15696125.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
,
,
,
标签:
,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步