相关疑难解决方法(0)

82
推荐指数
7
解决办法
23万
查看次数

不使用'/'的分部

任何人都可以告诉我一种有效的方法来执行除法操作而不使用'/'.我可以log(n)使用类似于二进制搜索的方法逐步计算整数值.

115/3 
57 * 3 > 115
28 * 3 < 115
47 * 3 > 115
.
.
.
38 * 3 is quotient value .....
Run Code Online (Sandbox Code Playgroud)

但还有其他更有效的方法吗?

algorithm bit-manipulation division

47
推荐指数
4
解决办法
7万
查看次数

C中的按位符号除法算法

好吧,说实话,这实际上是我的作业,我必须实现一个算法,必须能够划分两个值而不用它们的绝对值来进行除法.它还必须找出其余部分.

被除数是绝对值较大的除数,分压器的绝对值较小.

我做了很多谷歌搜索,但大多数例子只涵盖无符号值.

我尝试通过第一个回复中提到的方案来实现它: 使用逐位运算符实现除法 由于某种原因,这并没有让我走得太远.

然后我发现了这个: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)

c binary bit-manipulation division

8
推荐指数
1
解决办法
2970
查看次数

如何使用shift/add/sub除以9?

上周我接受了采访,有一个这样的测试:

使用SHIFT LEFT,SHIFT RIGHT,ADD,SUBSTRACT指令计算N/9(给定N为正整数) .

algorithm assembly cpu-architecture integer-arithmetic

8
推荐指数
1
解决办法
1106
查看次数

C - 针对模数的按位运算的算法,对于非2的幂次数

我知道可以使用按位运算符计算2的幂的模数

  x % 2^n == x & (2^n - 1).
Run Code Online (Sandbox Code Playgroud)

但我想知道是否存在任何广义的按位算法,以找出任何数的模数不是2的幂.例如,

 7%5 
Run Code Online (Sandbox Code Playgroud)

先感谢您.

c bit-manipulation bitwise-operators

4
推荐指数
2
解决办法
667
查看次数