5

正確にビットが設定された最小の整数を計算したいのですがk、それは別の整数より大きいですx

たとえば、 の場合x = 1001010k=2答えは1010000 であり、k=4答えは で1001011 ありk=5、答えは です。1001111

x整数に設定された左端のビットと少なくとも同じ数のビットを設定する必要があると思いますx。同じプロセスを繰り返して、それに続くビットの設定を見てください。その間ずっと、k から取り残されたビットを数えます。

これが正しいアプローチかどうかはわかりません。

4

1 に答える 1

6
++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;
}

2 番目のループが最適化される可能性があります。

for (i = k - popcnt(x); i != 0; --i)
{
    // Set the lowest non-set bit
    x |= x+1;
}
于 2012-06-15T20:39:49.197 に答える