#include <iostream>
#include <bitset>
using namespace std;
unsigned ctz(uint32_t x) {
unsigned n;
if (x == 0) return(32);
n = 1;
if ((x & 0x0000FFFF) == 0) {n = n +16; x = x >>16;}
if ((x & 0x000000FF) == 0) {n = n + 8; x = x >> 8;}
if ((x & 0x0000000F) == 0) {n = n + 4; x = x >> 4;}
if ((x & 0x00000003) == 0) {n = n + 2; x = x >> 2;}
return n - (x & 1);
}
int main() {
// your code goes here
bitset<32> x("11111111111111111111111111111111");
auto xxx = uint32_t(x.to_ulong());
//xxx |= 1 << 31u;
//xxx |= 1 << 30u;
bitset<32> xxx2(xxx);
cout << "Highest 32 bits set " << xxx2 << endl;
//xxx |= 1u << 1u;
//bitset<32> xxx3(xxx);
//cout << "FIRST 0 bit set " << xxx3 << endl;
auto found = ctz(xxx);
//unsigned toMove = found -1u;
if (found == 0)
{
xxx |= 0u << found;
}
xxx |= 1u << found;
bitset<32> xxxFinal(xxx);
cout << "FOUND index " << found << endl;
cout << "AFTER " << xxxFinal << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuc2lnbmVkIGN0eih1aW50MzJfdCB4KSB7CiAgIHVuc2lnbmVkIG47IAogICBpZiAoeCA9PSAwKSByZXR1cm4oMzIpOyAKICAgbiA9IDE7IAogICBpZiAoKHggJiAweDAwMDBGRkZGKSA9PSAwKSB7biA9IG4gKzE2OyB4ID0geCA+PjE2O30gCiAgIGlmICgoeCAmIDB4MDAwMDAwRkYpID09IDApIHtuID0gbiArIDg7IHggPSB4ID4+IDg7fSAKICAgaWYgKCh4ICYgMHgwMDAwMDAwRikgPT0gMCkge24gPSBuICsgNDsgeCA9IHggPj4gNDt9IAogICBpZiAoKHggJiAweDAwMDAwMDAzKSA9PSAwKSB7biA9IG4gKyAyOyB4ID0geCA+PiAyO30gCiAgIHJldHVybiBuIC0gKHggJiAxKTsgCn0gCgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCgkKCWJpdHNldDwzMj4geCgiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEiKTsKCWF1dG8geHh4ID0gdWludDMyX3QoeC50b191bG9uZygpKTsKCS8veHh4IHw9IDEgPDwgMzF1OwoJLy94eHggfD0gMSA8PCAzMHU7CgliaXRzZXQ8MzI+IHh4eDIoeHh4KTsKCWNvdXQgPDwgIkhpZ2hlc3QgMzIgYml0cyBzZXQgIiA8PCB4eHgyIDw8IGVuZGw7CgkvL3h4eCB8PSAxdSA8PCAxdTsKCS8vYml0c2V0PDMyPiB4eHgzKHh4eCk7CgkvL2NvdXQgPDwgIkZJUlNUIDAgYml0IHNldCAiIDw8IHh4eDMgPDwgZW5kbDsKCgkKCWF1dG8gZm91bmQgPSBjdHooeHh4KTsKCS8vdW5zaWduZWQgdG9Nb3ZlID0gZm91bmQgLTF1OwoJaWYgKGZvdW5kID09IDApCgl7CgkJeHh4IHw9IDB1IDw8IGZvdW5kOwoJfQoJeHh4IHw9IDF1IDw8IGZvdW5kOwoJCgliaXRzZXQ8MzI+IHh4eEZpbmFsKHh4eCk7Cgljb3V0IDw8ICJGT1VORCBpbmRleCAiIDw8IGZvdW5kIDw8IGVuZGw7Cgljb3V0IDw8ICJBRlRFUiAiIDw8IHh4eEZpbmFsIDw8IGVuZGw7CglyZXR1cm4gMDsgCn0=