利用移位指令来实现一个数除以10

dbd27 2009-10-15 07:36:11
RT
除以2的n次幂是很容易的,除以10呢?
...全文
3924 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
desdouble 2009-10-20
  • 打赏
  • 举报
回复
转packed-BCD,右移四位。
jxc25 2009-10-17
  • 打赏
  • 举报
回复
1/17=0.(000001111)循环b
nanlingcg 2009-10-17
  • 打赏
  • 举报
回复
除以10用移位貌似不难搞,要除以17等等就有点难度了。。。
dbd27 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 nanlingcg 的回复:]
除以10用移位貌似不难搞,要除以17等等就有点难度了。。。
[/Quote]

举个除10的例子?
luoqi 2009-10-16
  • 打赏
  • 举报
回复
mov eax,370
sub eax,37
sub eax,37
mov ecx,4
shr eax
ji2feng 2009-10-16
  • 打赏
  • 举报
回复
路过!!!
killbug2004 2009-10-16
  • 打赏
  • 举报
回复
如果你看过编译器生成代码优化或一些大型系统的源码,或者嵌入式代码优化等等性能要求非常高的代码,你就会发现一些称之为magic number如0xAAAAAAAB、0x66666667、0x24924925,0x51EB851F、0x10624DD3。。。。
这些分别是快速除法(3,5,7。。。)的魔幻数字
Value / 10 ~= [ (Value * 0x66666667) / 2^32 ] / 2^2 ]
编译器一般用这个来优化除法,至于怎么得来的自己google吧
dbd27 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luoqi 的回复:]
mov eax,370
sub eax,37
sub eax,37
mov ecx,4
shr eax
[/Quote]

你是无法知道那个立即数的1/10,而且应该移3位而不是移4位
jxc25 2009-10-15
  • 打赏
  • 举报
回复
*0.1或*0.0000(1100)循环b
比如10/10或1010b*0.0000(1100)循环b
1010
01010
00001010
000001010
______________
0.(1)循环b
ldfqq 2009-10-15
  • 打赏
  • 举报
回复
算法类似于组成原理课的一位除法的实现,给你找了个实例:
实现Y/X :
    
sum=0
while ( y > x)
{
把 x 向左移位,直到 x' >= y ,然后x' >>= 1 记录左移的位数 i
然后 y-=x'
sum += 2<<i;
}

最后的 sum 就是商,最后的y就是余数

比如 76/5:
76 = 1001100b
5 = 101b

1. 1001100
- 101000 i=3
-------------
100100

2. 100100
- 10100 i=2
-------------
10000

3. 10000
- 1010 i=1
-------------
110

4. 110
-101 i=0
------------
1

最后: 商= 2^3 +2^2 +2^1 +2^0 =15
余数=1

从应用密码学中可以找到类似的乘法、幂运算。
dbd27 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ldfqq 的回复:]
可以使用移位减实现

[/Quote]

移位减?
这个概念我没接触过哦..
可否详细一点?
dbd27 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangyu_fei 的回复:]
不会!
从来就只听说过做乘的。今天第一次听说做除的。正好明天有汇编课,问问老师。呵呵!
[/Quote]
左移1位就是乘2
右移1位就是除2了
ldfqq 2009-10-15
  • 打赏
  • 举报
回复
可以使用移位减实现
Eid 2009-10-15
  • 打赏
  • 举报
回复
不会!
从来就只听说过做乘的。今天第一次听说做除的。正好明天有汇编课,问问老师。呵呵!

21,486

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧