سوال ۶

برنامه‌ی زیر چه کار می‌کند؟

main.c
int s = (1 << k) - 1;
while (!(s & 1 << N)) {
    // do stuff with s
    int lo = s & ~(s - 1);       // lowest one bit
    int lz = (s + lo) & ~s;      // lowest zero bit above lo
    s |= lz;                     // add lz to the set
    s &= ~(lz - 1);              // reset bits below lz
    s |= (lz / lo / 2) - 1;      // put back right number of bits at end 
}