reference:
http://www.geeksforgeeks.org/compute-modulus-division-by-a-power-of-2-number/
Problem Definition:
Compute n modulo d without division(/) and modulo(%) operators, where d is a power of 2 number.
Solution:
Let ith bit from right is set in d. For getting n modulus d, we just need to return 0 to i-1 (from right) bits of n as they are and other bits as 0.
For example if n = 6 (00..110) and d = 4(00..100). Last set bit in d is at position 3 (from right side). So we need to return last two bits of n as they are and other bits as 0, i.e., 00..010.
Code:
/* This function will return n % d.
d must be one of: 1, 2, 4, 8, 16, 32, … */
unsigned int getModulo(unsigned int n, unsigned int d)
{
return ( n & (d-1) );
}
本文介绍了一种不使用除法和取模操作符来计算n对d取模的方法,其中d为2的幂。通过位运算返回n的最后i位(从右数),其他位清零。

被折叠的 条评论
为什么被折叠?



