Когда я умножаю два знака без знака в C, вот так:
unsigned char a = 200;
unsigned char b = 200;
unsigned char c = a * b;
Тогда я знаю, что у меня будет переполнение, и в результате я получу (40'000 по модулю 256). Когда я делаю это:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = (int)a * (int)b;
Я получу правильный результат 40'000. Однако я не знаю, что происходит с этим:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = a * b;
Могу ли я быть уверенным, что происходит правильная вещь? Зависит ли этот компилятор? Точно так же я не знаю, что происходит при выполнении вычитания:
unsigned char a = 1;
unsigned char b = 2;
int c = a - b;
Когда я делаю символ "c" без знака, я, вероятно, получу 255 в результате. Что происходит, когда я использую int как этот?