> + a += v >> (sizeof (intptr_t) * CHAR_BIT / 2); > + b += v & (((intptr_t) 1 << (sizeof (intptr_t) * CHAR_BIT / 2)) - 1);
It would be far easier to read if you added a BITS_PER_POINTER define somewhere. Other than that it looks good to me, but I cannot approve. -Andi