我使用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发生了什么事?第一个示例中的32
和5
是在分配给uint mask
时获得的另一种类型吗?我该如何解决这个问题?