如何用C中的运算符求mod(2的次方)?
代码:
这个求mod的方法,只可以在求2的次方的mod时有效,只运用到简单的运算。
#include <stdio.h>
int main()
{
unsigned int value;
unsigned int x;
unsigned int mask;
unsigned int value_mod_x;
printf("输入数字:");
scanf("%u", &value);
printf("取mod:");
scanf("%u", &x);
mask = x - 1;
value_mod_x = value & mask;
printf("结果:%u\n", value_mod_x);
return 0;
}
讨论:
那么我们在上面的操作中,为什么可以求mod呢?
首先我们要求用户输入数字和想取mod的数字,
然后我们用输入的数字-1得到一个掩码(mask),那么这个掩码(mask)是做什么的呢?
假如数字输入的是10, 然后mod输入的是8
十进制 mod | 8 |
二进制 mod | 0000 1000 |
二进制 mod - 1 | 0000 0111 |
我们可以看到,将mod - 1之后就会从。
最后我们再将用户输入的数字和这个掩码(mask)进行与操作(&),就可以得到求mod后的值了。
因为掩码使得我们可以只关心比这个mod数小的位。比如mod 8的话,我们得到的结果永远不可能小于8。我们直接和输入的数字进行与操作(&)即可得到结果。(注意mod只可以是2的次方哦!)
(有可能会更新详细证明...)