In C#, conversions are divided into implicit and explicit conversions. Implicit conversions are those that will always succeed; the conversion can always be performed without data loss. For numeric types, this means the destination type can fully represent the range of the source type. For example, a short can be converted implicitly to an int, because the short range is a subset of the int range. Explicit conversions may result in data loss and therefore must be specified directly.
For the numeric types, there are widening implicit conversions for all the signed and unsigned numeric types. Figure 14-1 shows ...