unsigned A000788(unsigned n) { unsigned v = 0; for (unsigned bit = 1; bit <= n; bit <<= 1) v += ((n>>1)&~(bit-1)) + ((n&bit) ? (n&((bit<<1)-1))-(bit-1) : 0); return v; }