#include <stdio.h>
int isPositive(int x) { return ((~x & (~x + 1)) >> 31) & 1; }
int isPowerOfTwo(int x) { return isPositive(x) & ~(x & (x-1)); }
int log2(int x)
{
int i = (-1);
while(isPositive(x)) i++, x >>= 1;
return i;
}
int isPowerOfNegativeTwo(int x)
{
return ( isPositive(x) & isPowerOfTwo(x) & ~(log2(x) % 2) )
| ( ~isPositive(x) & isPowerOfTwo(-x) & (log2(-x) % 2) );
}
int main(void)
{
int x = 256;
printf("%s", isPowerOfNegativeTwo
(-512)?"true":"false"); //printf("%s",( isPositive(x) & isPowerOfTwo(x) & ~(log2(x) % 2) )?"true":"false");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgoJaW50IGlzUG9zaXRpdmUoaW50IHgpIHsgcmV0dXJuICgofnggJiAofnggKyAxKSkgPj4gMzEpICYgMTsgfQoKCWludCBpc1Bvd2VyT2ZUd28oaW50IHgpIHsgcmV0dXJuIGlzUG9zaXRpdmUoeCkgJiB+KHggJiAoeC0xKSk7IH0KCQoJaW50IGxvZzIoaW50IHgpCgl7CgkJaW50IGkgPSAoLTEpOwoJCXdoaWxlKGlzUG9zaXRpdmUoeCkpIGkrKywgeCA+Pj0gMTsKCQlyZXR1cm4gaTsKCX0KCQoJaW50IGlzUG93ZXJPZk5lZ2F0aXZlVHdvKGludCB4KQoJewoJCXJldHVybiAoICBpc1Bvc2l0aXZlKHgpICYgIGlzUG93ZXJPZlR3byh4KSAmIH4obG9nMih4KSAlIDIpICkKCQkJIHwgKCB+aXNQb3NpdGl2ZSh4KSAmIGlzUG93ZXJPZlR3bygteCkgJiAobG9nMigteCkgJSAyKSApOwoJfQoKaW50IG1haW4odm9pZCkKewoJaW50IHggPSAyNTY7CglwcmludGYoIiVzIiwgaXNQb3dlck9mTmVnYXRpdmVUd28oLTUxMik/InRydWUiOiJmYWxzZSIpOwoJLy9wcmludGYoIiVzIiwoIGlzUG9zaXRpdmUoeCkgJiBpc1Bvd2VyT2ZUd28oeCkgICYgfihsb2cyKHgpICUgMikgKT8idHJ1ZSI6ImZhbHNlIik7CglyZXR1cm4gMDsKfQo=