なんか素直にやったら一行になった。

return (a > 0 && (a | (a - 1)) == (a + (a - 1))) ? 1 : 0 ;

答えはもっと簡単?