In C, type conversions refer to the process of converting one data type to another. The C compiler handles type conversions through two main mechanisms: implicit conversion (also known as type promotion) and explicit conversion (also known as type casting).
1. Implicit Type Conversion
Implicit conversion is performed automatically by the compiler when a value of one type is assigned to a variable of another compatible type. This happens when there is no risk of data loss or overflow. For example, when an int
is assigned to a float
, the compiler automatically converts the integer to a floating-point number:
int a = 10; float b = a; // Implicit conversion from int to float
In this case, the compiler promotes the integer a
to a float
because it can be represented accurately without loss of data. Implicit conversions usually occur in expressions, such as when performing arithmetic operations between different data types. For example, adding an int
to a double
promotes the int
to double
to avoid precision loss:
int i = 5; double d = 3.14; double result = i + d; // Implicit conversion of int to double
2. Explicit Type Conversion (Type Casting)
Explicit conversion, or type casting, occurs when the programmer explicitly instructs the compiler to convert a value from one type to another. This is done using casting syntax, such as (type)value
. For example, converting a float
to an int
:
float x = 9.87; int y = (int) x; // Explicit conversion from float to int
Here, the value 9.87
is truncated to 9
because casting a floating-point number to an integer discards the fractional part.
3. Types of Conversions
- Widening Conversion: Smaller types (e.g.,
char
,short
) are promoted to larger types (e.g.,int
,long
,float
). - Narrowing Conversion: Larger types (e.g.,
double
,long
) are converted to smaller types (e.g.,int
,char
), often with potential loss of precision or overflow.
Summary
In summary, the C compiler automatically handles type conversions when safe (implicit), but when precision loss or overflow might occur, explicit casting is used, requiring the programmer’s intervention. This behavior ensures that data is handled correctly during arithmetic operations and assignments.