如何用C中的运算符求mod(2的次方)?

如何用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

十进制 mod8
二进制 mod0000 1000
二进制 mod - 10000 0111

我们可以看到,将mod - 1之后就会从1000_2\rightarrow 0111_2

最后我们再将用户输入的数字和这个掩码(mask)进行与操作(&),就可以得到求mod后的值了。

因为掩码使得我们可以只关心比这个mod数小的位。比如mod 8的话,我们得到的结果永远不可能小于8。我们直接和输入的数字进行与操作(&)即可得到结果。(注意mod只可以是2的次方哦!)

 

(有可能会更新详细证明...)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YifengGuo233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值