将范围[m,n]中的所有位设置为1

时间:2018-06-13 19:58:21

标签: c++ bit-manipulation bitwise-operators uint

我使用This Link中的代码生成uint,其位在所需的indeces范围内都设置为1。

例如:

#include <iostream>
#include <string>

int main ()
{
    // range is [32,5] so i want [1 1 1......1 0 0 0 0 0]
    uint mask = ((1 << 32) - 1) ^ ((1 << (5 - 1)) - 1);
    std::cout << mask << std::endl;
}

输出为4294967280,其中包含根据this site所需的位数组。

但是,只要我执行以下操作:

#include <iostream>
#include <string>

int main () 
{
    uint stop = 32;
    uint start = 5;
    uint mask = ((1 << stop) - 1) ^ ((1 << (start - 1)) - 1);
    std::cout << mask << std::endl; 
}

输出15。 Uuuuh发生了什么事?第一个示例中的325是在分配给uint mask时获得的另一种类型吗?我该如何解决这个问题?

0 个答案:

没有答案