【问题标题】:Divide two integers using only bitwise operations [duplicate]仅使用按位运算将两个整数相除[重复]
【发布时间】:2012-09-22 01:09:57
【问题描述】:

可能重复:
implement division with bit wise operator

我最近对位函数有了更深入的了解,并开始使用位运算符实现基本的算术函数。到目前为止,我已经收到(+, -, *)。但是我不确定如何处理除法。我知道我可以以某种方式使用乘法,但也不确定如何使用该方法来解决这个问题。

那么我将如何仅使用按位运算符来实现除法:(|, &, ~, ^, >>, <<) 在 C 中?如果有人问,这不是功课,只是个人知识。

如果你喜欢,你可以在代码中调用以下函数,使其更简单(这些都是预先编写好的)

int badd(int n1, int n2);
int bsub(int n1, int n2);
int bmult(int n1, int n2);

【问题讨论】:

  • 对于这样的棘手问题,您不必提及家庭作业 :)
  • 我建议的欺骗链接使用减法。但我假设你已经有了这个工作。
  • 签名重要吗?
  • 您需要仅使用单个表达式来完成,还是允许使用函数并且也允许使用流控制语句?
  • @Link:将重复链接中的减号替换为bsub(),就大功告成了。

标签: c int bit-manipulation division


【解决方案1】:

好吧,假设你有可用的标准库,你可以在 C 中完全不使用任何运算符来划分两个整数:

int result = div(a, b).quot;

注意:这个答案纯粹是修辞,但它被放在那里是为了表明在标准库(和语言本身)支持它。当答案已经触手可及时,为什么还要重写轮子(即使只是为了学习)?

【讨论】:

  • 这不是我所说的函数,我以为你会将代码实现为函数。但在优雅方面做得很好。
  • @Link 哈哈,真是开个玩笑,不使用运算符的除法当然是可以的,但问题是为什么,什么时候可以使用运算符或汇编指令。我也知道使用FILE *fwrite / fread 的方法,如果你想看看的话。
  • @RichardJ.RossIII:评论你的笔记:了解事情是如何运作的。当被问到为什么有人会攀登珠穆朗玛峰时,就像说“因为它就在那里”一样。你给出的“修辞”答案是我老话的一个典型例子:如果你知道如何使用函数SolveAllMathProblems(),你仍然不知道数学。
猜你喜欢
  • 2016-02-22
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
相关资源
最近更新 更多