#include <stdio.h>
unsigned int rightrot(unsigned int x, unsigned int n)
{
unsigned int i, rmb;
for(i = 0; i < n; ++i)
{
// get right-most bit
rmb = x & 1;
// shift 1 to right
x = x >> 1;
// if right-most bit is set, set left-most bit
if (rmb == 1)
x = x | (~0u ^ (~0u >> 1) );
}
return x;
}
int main(void) {
printf("%u\n", rightrot
(122, 2)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp1bnNpZ25lZCBpbnQgcmlnaHRyb3QodW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCBuKQp7CiAgICB1bnNpZ25lZCBpbnQgaSwgcm1iOwoKICAgIGZvcihpID0gMDsgaSA8IG47ICsraSkKICAgIHsKICAgICAgICAvLyBnZXQgcmlnaHQtbW9zdCBiaXQKICAgICAgICBybWIgPSB4ICYgMTsKCiAgICAgICAgLy8gc2hpZnQgMSB0byByaWdodAogICAgICAgIHggPSB4ID4+IDE7CgoJCS8vIGlmIHJpZ2h0LW1vc3QgYml0IGlzIHNldCwgc2V0IGxlZnQtbW9zdCBiaXQKICAgICAgICAKICAgICAgICBpZiAocm1iID09IDEpCiAgICAgICAgICAgIHggPSB4IHwgKH4wdSBeICh+MHUgPj4gMSkgKTsKICAgIH0KCiAgICByZXR1cm4geDsKfQoKaW50IG1haW4odm9pZCkgewoJcHJpbnRmKCIldVxuIiwgcmlnaHRyb3QoMTIyLCAyKSk7CglyZXR1cm4gMDsKfQo=