Если я выполню следующий код на C:
#include <stdint.h>
uint16_t a = 4000;
uint16_t b = 8000;
int32_t c = a - b;
printf("%d", c);
В результате он правильно печатает «-4000». Однако я немного смущен: не должно ли быть арифметического переполнения при вычитании большего целого числа без знака из другого? Какие правила кастинга здесь действуют? Этот вопрос кажется немного нубским, поэтому любые ссылки будут очень признательны.