The result of casting a pointer to an integer or vice versa (§3.3.4)
Near pointers are the same size as short integers; casting near to short (or short to near) has no immediate effect on the value.
Far pointers and huge pointers are the same size as long integers. Casting far/huge to long (or long to far/huge) has no immediate effect on the value.
When a near pointer is cast to a long, the 16-bit value is “normalized,” which means the segment (usually DS) and offset are combined to produce a 32-bit memory location.
When a far or huge pointer is cast to a short, the long value is truncated to a short.
The compiler normalizes based pointers when necessary, unless the based pointer is a constant zero, in which case it is assumed to be a null pointer. See Chapter 12, “Writing Portable C Programs,” in the Programming Techniques manual for more information about based pointers.