如何仅使用位移和加法进行乘法和除法?
任何人都可以告诉我一种有效的方法来执行除法操作而不使用'/'.我可以log(n)使用类似于二进制搜索的方法逐步计算整数值.
115/3
57 * 3 > 115
28 * 3 < 115
47 * 3 > 115
.
.
.
38 * 3 is quotient value .....
Run Code Online (Sandbox Code Playgroud)
但还有其他更有效的方法吗?
好吧,说实话,这实际上是我的作业,我必须实现一个算法,必须能够划分两个值而不用它们的绝对值来进行除法.它还必须找出其余部分.
被除数是绝对值较大的除数,分压器的绝对值较小.
我做了很多谷歌搜索,但大多数例子只涵盖无符号值.
我尝试通过第一个回复中提到的方案来实现它: 使用逐位运算符实现除法 由于某种原因,这并没有让我走得太远.
然后我发现了这个:http: //www4.wittenberg.edu/academics/mathcomp/shelburne/comp255/notes/BinaryDivision.pdf 当我使用文档末尾的例子编写下面的代码时,我得到了它.
如果第一个值是正数而第二个值不是,那么这个就是正确的.
我现在至少工作了2天.也许有人可以说我哪里出错了.
这是我在@Dysaster的帮助下设法编写的代码.当两个值都是负数或正数时它不起作用但我在保护中设法从25中得到20分.
#include <stdio.h>
#include <stdlib.h>
char *bits(char Rg) {
unsigned char bit = 0x80;
int i;
char *bits;
bits = (char*) malloc(9);
for (i=0; i < 8; i++) {
*(bits+i) = Rg & bit ? '1' : '0';
bit >>= 1;
}
*(bits+i) = '\0';
return bits;
}
int divide(char Rg1, char Rg2) {
char Rg3, r=0;
int i;
printf("Rg1 : %s (%2d)\n", bits(Rg1), Rg1);
printf("Rg2 : …Run Code Online (Sandbox Code Playgroud) 上周我接受了采访,有一个这样的测试:
使用SHIFT LEFT,SHIFT RIGHT,ADD,SUBSTRACT指令计算N/9(给定N为正整数)
.
我知道可以使用按位运算符计算2的幂的模数
x % 2^n == x & (2^n - 1).
Run Code Online (Sandbox Code Playgroud)
但我想知道是否存在任何广义的按位算法,以找出任何数的模数不是2的幂.例如,
7%5
Run Code Online (Sandbox Code Playgroud)
先感谢您.