>>32 ptrdiff_t has to be a signed integer. really_large_unsigned_integer - really_low_unsigned integer = overflow when stored in a signed integer of the same width In practice they're probably the same size on most platforms, since the only way you could get an overflow is by taking the difference of a pointer in kernel space (really high) and user space (really low), and that is not something that you'd ever need to do, but I see where da standed was going with it.