One of the most hardcore stuff in C language is implicit type conversion. If you don’t watch for it – you will be in big trouble. Take a look at this code:
#include <stdio.h>
int main (void)
{
int a = -10;
unsigned int b = 5U;
long int c = a + b; // signed + unsigned
printf ("1) (signed int)a -10 will look as unsigned like this: %u\n", a);
printf ("2) (signed)a(-10) + (unsigned)b(5) = %ld\n", c);
return 0;
}
Implicit type conversion ranks:
bool
char
unsigned char
short int
unsigned short int
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
float
double
long double