当前位置:  开发笔记 > 编程语言 > 正文

位掩码左移

如何解决《位掩码左移》经验,为你挑选了1个好方法。

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

构建一个unsigned long类型的掩码,将14个最低有效位(从右侧)设置为1;

#include 
#include 
unsigned long mask;
int main()
{
    int i;
    for(i=0;i<14;i++)
        mask|=(1<

Solaine Char.. 8

这个比较好

#include 
#include 
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.



1> Solaine Char..:

这个比较好

#include 
#include 
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.


@DariusIonut相同的原因1,000 - 1是999.如果你想要基数10的N 9,你取(10 ^ N)-1.如果你想在基数为2的N 1,你取(2 ^ N)-1.
因为掩码是`unsigned long`所以它应该用'%lu`打印.
由于OP要求构建位掩码,而不是打印它,所以作为评论会更好.(如果问题不那么模糊,那甚至都不是答案.)
@DariusIonut如果你需要左边的位,我会给你一个提示:`~`
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有