Вычислить наименьшее целое число с множеством k бит, которое больше другого целого x?

Я хочу вычислить наименьшее целое число с точно установленным числом бит, что больше, чем другое целое число x .

Например, если x = 1001010 то для k=2 ответ должен быть 1010000 для k=4 , ответ должен быть 1001011 а для k=5 ответ равен 1001111

Я думаю, что нужно было бы установить как минимум столько битов, сколько левых битов, заданных в целочисленном x , а затем выбрать между установкой бит стороны MSB, смежным со следующим крайним левым битом в x , или установкой следующего крайнего крайнего бита а затем посмотрите на установку битов, следующих за ним, повторяя тот же процесс; все время считая бит, оставшийся от k.

Я не уверен, что это правильный подход.

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