Type conversion
- Type conversion occurs when the expression has data of mixed data types.
- example of such expression include converting an integer value in to a float value, or assigning the value of the expression to a variable with different data type.
- In type conversion, the data type is promoted from lower to higher because converting higher to lower involves loss of precision and value.
- For type conversion, C following some General rules explained below
- Integer types are lower than floating point types
- Signed types are lower than unsigned types
- Short whole number types are lower than longer types
- double>float>long>int>short>char
In other word :
Type Conversion refers to translating of values (roughly speaking, contents of the object), so that they may be interpreted as belonging to a new type.
Example :
double d;
long l;
int i;
if (d > i) d = i;
if (i > l) l = i;
if (d == l) d *= 2;
Type Casting (or) Explicit Type conversion:
- Explicit type conversions can be forced in any expression , with a unary operator called a cast.
- Syntax is
(type-name) expression;
int n;
float x;
x=(float)n;
- The above statement will convert the value of n to a float value before assigning to x.but n is not altered
- Type casting does not change the actual value of the variable but the resultant value may be put in temporary storage.
- The cast operator has the same high precedence as other unary operators.
- The Typecasting should not be used in some places.such as
- Type cast should not be used to override a const or volatile declaration.overriding these type modifiers can cause the program to fail to run correctly.
- Type cast should not be used to turn a pointer to one type of structrure or data type in to another.
- Example of type casting using pointers
#include<stdio.h>
main()
{
void *temp; //void pointer
char c='a',*ch="hello";
int i=10;
temp=&c;
printf("char=%c\n",*(char *)temp);
temp=ch;
printf("string=%s\n",(char *)temp);
temp=&i;
printf("i=%d\n",*(int *)temp);
return 0;
}
output:
char=a
string=hello
i=10 //here temp is a void pointer.temp is used to typecast to anyother pointer