The type of integer required to hold the difference between two pointers to elements of the same array, ptrdiff_t (§3.3.6, 4.1.1)
A ptrdiff_t is a signed integer in the range –32,768 to 32,767, with one exception. Because huge pointers can address more than 64K of memory, subtracting one huge pointer from another can yield a result that is a long integer. The result of subtracting two huge pointers should be cast to a long.
The compiler normalizes based pointers when necessary. In most cases, based pointers are treated as far pointers.