Type casting is converting a variable from one data type to another. It is done explicitly using a cast operator like (type_name). It is best to cast to a higher data type to avoid data loss as casting to a lower type may truncate the value. There are two types of casting in C - implicit casting which happens automatically during assignment, and explicit casting which requires a cast operator. Implicit casting is done when assigning a value to a compatible type while explicit casting is needed when types are incompatible.