打印
[MM32软件]

怎么用位运算实现除法操作啊?

[复制链接]
1295|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Bowclad|  楼主 | 2022-9-11 20:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想用位运算实现除法,查了一圈没学会

使用特权

评论回复
沙发
gouguoccc| | 2022-9-11 23:32 | 只看该作者
没有这样写过

使用特权

评论回复
板凳
andygirl| | 2022-9-12 17:14 | 只看该作者
简单的直接移位

使用特权

评论回复
地板
ufbycd| | 2022-9-12 21:02 | 只看该作者
x/2 等效于 x>>1、x/4等效于x>>2,依此类推

使用特权

评论回复
5
朝生| | 2022-9-13 14:29 | 只看该作者
位运算只能进行简单的除法操作。

使用特权

评论回复
6
朝生| | 2022-9-13 14:30 | 只看该作者
你可以贴出一个除法公式,让大伙给你看看位运算符如果写对应的语句

使用特权

评论回复
7
Stahan| | 2022-9-16 20:41 | 只看该作者
可以贴一下代码吗?

使用特权

评论回复
8
tpgf| | 2022-10-8 21:02 | 只看该作者
左移是做乘法 右移就是做除法了啊

使用特权

评论回复
9
qcliu| | 2022-10-9 08:18 | 只看该作者
位运算的话 就用位左移或者右移操作就可以

使用特权

评论回复
10
drer| | 2022-10-9 08:29 | 只看该作者
最简单的就是不断地用被除数减去除数,直到被除数小于除数,此时减的次数就是商

使用特权

评论回复
11
coshi| | 2022-10-9 08:49 | 只看该作者
abc * def 这种形式的乘法,实际上可以转化为加法和移位的结合。因为对于abc * def,实际上对于def中的每一位(例如e),都有对应个(e个)的abc相加,然后将结果提升当前位的权值(假如是十进制,对于e,提升10^1)。这样每一位运算的结果加起来,就是最终的结果。

使用特权

评论回复
12
kxsi| | 2022-10-9 09:06 | 只看该作者
对于二进制来说,从高到低的每一位,将除数提升到当前位的权值(即,乘以2^k,等同于左移k位),如果此时被除数扔大于除数,就说明结果在这个位上商1。然后从被除数减掉除数提升后的值。遍历每一位,即为最终的结果。

使用特权

评论回复
13
wiba| | 2022-10-9 09:19 | 只看该作者
对于任何十进制正整数 K :
设其二进制为 “bn…b2b1b0”(其中 bi 为二进制某位值,i∈[0,n] )
二进制数:K = b0 * 2^0 + b1 * 2^1 + b2 * 2^2 + … + bn * 2^n
故乘二有:K = b0 * 2^1 + b1 * 2^2 + b2 * 2^3 + … + bn * 2^(n+1)
即左移一:K = 00 * 2^0 + b0 * 2^1 + b1 * 2^2 + … + bn * 2^(n+1)
同理除二:K = b0 *2^-1 + b1 * 2^0 + b2 * 2^1 + … + bn * 2^(n-1)
即左移一:K = b1 * 2^0 + b2 * 2^1 + b3 * 2^2 + … + bn * 2^(n-1)

使用特权

评论回复
14
foxsbig| | 2022-10-12 20:58 | 只看该作者
左移,右移

使用特权

评论回复
15
星辰大海不退缩| | 2022-10-13 10:32 | 只看该作者
ufbycd 发表于 2022-9-12 21:02
x/2 等效于 x>>1、x/4等效于x>>2,依此类推

确实目前位运算是进行2为底的指数的除法运算,但其他的貌似还没有,可能得需要算法进行整体规划

使用特权

评论回复
16
ufbycd| | 2022-10-13 10:45 | 只看该作者
星辰大海不退缩 发表于 2022-10-13 10:32
确实目前位运算是进行2为底的指数的除法运算,但其他的貌似还没有,可能得需要算法进行整体规划 ...

只有在处理器没有除法指令且写汇编时才需要自己实现任意数值的除法运算,写C就直接用除号即可,编译器会帮你实现

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

130

主题

2281

帖子

1

粉丝