相关疑难解决方法(0)

将整数除以3的最快方法是什么?

int x = n / 3;  // <-- make this faster

// for instance

int a = n * 3; // <-- normal integer multiplication

int b = (n << 1) + n; // <-- potentially faster multiplication
Run Code Online (Sandbox Code Playgroud)

optimization bit-manipulation division

33
推荐指数
6
解决办法
4万
查看次数

用二元运算检查除以3?

我读过这个有趣的答案," 检查数字是否可以被3整除 "

虽然答案是Java,但它似乎也适用于其他语言.

显然我们可以这样做:

boolean canBeDevidedBy3 = (i % 3) == 0;
Run Code Online (Sandbox Code Playgroud)

但有趣的部分是另一个计算:

boolean canBeDevidedBy3 = ((int) (i * 0x55555556L >> 30) & 3) == 0;
Run Code Online (Sandbox Code Playgroud)

为简单起见:

0x55555556L = "1010101010101010101010101010110"

还有另一种检查方法:

通过计算奇数位位置的1位,可以确定整数是否可被3整除,将该数乘以2,在偶数位添加1位数将它们加到结果中并检查结果是否可被整除3

例如 :

93 10(可被3整除)
01011101 2

2在奇数位置有位,在偶数4位有位(位置是基于基数2位的零)

所以2*1 + 4 = 6哪个可被整除3.

起初我认为这两种方法是相关的,但我没有找到.

如何

  boolean canBeDevidedBy3 = ((int) (i * 0x55555556L >> 30) & 3) == 0;
Run Code Online (Sandbox Code Playgroud)

- 实际确定是否i%3==0

c# java bit-manipulation bitwise-operators

7
推荐指数
1
解决办法
2095
查看次数