When I multiply two unsigned characters in C, like this:
unsigned char a = 200; unsigned char b = 200; unsigned char c = a * b;
Then I know that I will have an overflow, and I will receive (40'000 modulo 256). When I do this:
unsigned char a = 200; unsigned char b = 200; unsigned int c = (int)a * (int)b;
I will get the correct result 40'000. However, I do not know what is happening with this:
unsigned char a = 200; unsigned char b = 200; unsigned int c = a * b;
Can I be sure that the right thing will happen? Is this compiler dependent? Similarly, I do not know what happens when performing the subtraction:
unsigned char a = 1; unsigned char b = 2; int c = a - b;
When creating an unsigned "c" char, I will probably get 255. What happens when I use an int like this?
Jan RΓΌegg
source share