Calculer le plus petit entier avec k bits défini supérieur à un autre entier x?

Je veux calculer le plus petit entier avec exactement k bits, c’est-à-dire supérieur à un autre entier x .

Par exemple, si x = 1001010 alors pour k=2 , la réponse devrait être 1010000 pour k=4 , la réponse devrait être 1001011 et pour k=5 la réponse est 1001111

Je pense qu’il faudrait définir au moins autant de bits que les bits les plus à gauche définis dans l’entier x , puis choisir entre définir le bit côté MSB adjacent au bit défini le plus à gauche dans x , ou définir le bit défini le plus à gauche suivant et ensuite, regardez comment définir les bits qui suivent en répétant le même processus; tout en comptant les bits laissés de la k.

Je ne suis pas sûr que ce soit la bonne approche.

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

La deuxième boucle peut être optimisée:

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