我们一般取余的操作为 M%N;
在编译器会把操作转化为:
M % N = M -N * floor(M/N);
此时,我们可以将N替换为 2^K
,这里 2^K
恰好大于N,
这样M % 2^K
就可以转换为 M & (2^K -1)
例如:
unsigned int i = 5, j = 8;
printf("%d\n", i%j);
printf("%d\n", i&(j-1));
我们一般取余的操作为 M%N;
在编译器会把操作转化为:
M % N = M -N * floor(M/N);
此时,我们可以将N替换为 2^K
,这里 2^K
恰好大于N,
这样M % 2^K
就可以转换为 M & (2^K -1)
例如:
unsigned int i = 5, j = 8;
printf("%d\n", i%j);
printf("%d\n", i&(j-1));