Consider the following code:
int fn(int x, unsigned int factor) {
return x / factor;
}
int main(void)
{
int x=-20,y=10,res;
res = fn(x,y);
printf("y=%d\n",res);
return 0;
}
the function divide -20 by 10 and return the result , expect to get -2 as a result but it prints:
y=429496727
its a weird pitfall because the function get signed int and we send -20 and unsigned int and we send 10. It looks ok but the divide cannot perform on different types so the unsigned int is converted to int (big number because msb=1) and we get a wrong result
Conclusion
Do not perform operations on different types without explicit casting