计算与k位的最小整数设定为比另一个整数x更大?(Calculate the smallest int

2019-09-18 04:11发布

我要计算与完全最小整数k设置位,比另一个整数更大的x

例如,如果x = 1001010则对于k=2 ,答案应该是1010000k=4 ,答案应1001011k=5的回答为1001111

我认为,一个需要设置至少一样多的位在整数设置的最左边位x ,然后设置MSB侧比特相邻的下一个最左边之间选择设置位x ,或将下一个最左边的设置位然后看设置继比特通过重复相同的过程; 所有的同时计数位留出了k的。

我不知道这是否是正确的做法。

Answer 1:

++x;

while (popcnt(x) > k)
{
    // Substitute the least-significant group of bits
    // with single bit to the left of them
    x |= x-1;
    ++x;
}

unsigned bit = 1;
while (popcnt(x) < k)
{
    x |= bit;
    bit <<= 1;
}

第二回路可被优化:

for (i = k - popcnt(x); i != 0; --i)
{
    // Set the lowest non-set bit
    x |= x+1;
}


文章来源: Calculate the smallest integer with k bits set that is greater than another integer x?