位掩码左移

大流士爱奥努特

我试图解决一个问题,但我不知道这是否是一个好的解决方案。

构建一个无符号长类型的掩码,将14个最低有效位(从右侧开始)设置为1;

#include <stdio.h>
#include <stdlib.h>
unsigned long mask;
int main()
{
    int i;
    for(i=0;i<14;i++)
        mask|=(1<<i);
    printf("%li",mask);
    return 0;
}
索兰·夏隆(Solaine Charron)

这个比较好

#include <stdio.h>
#include <stdlib.h>
unsigned long mask;
int main()
{
    int num = 14;
    mask = (1 << num) - 1;
    printf("%lu", mask);
    return 0;
}

num是最低有效位的总数。

这个怎么运作

2 ^ 14 = 16348的二进制表示是0000000000000000 0100000000000000‬(32位)和

2 ^ 14-1 = 16347的二进制表示为 0000000000000000 0011111111111111‬

因此14个最低有效位设置为1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章