Вам нравиться слово реверс инжиниринг?
Данный вопрос не имеет отношения к экспериментальному установлению истины, которую и я считаю весьма зыбкой в условиях проф разработки.
Если на данный вопрос и есть ответ то не в стандартах С, а в стандартах представления двоичного числа и реализации операции вычитания.
ответ добывается так
1. представление числа в 2-ичном виде. Берем 2 числа, и 4 битную арифметику, числа 2 и 12 представляются как 0010 и 1100 - надеюсь тут не будет ремарки про реверс инжиниринг? Документальное подтверждение что числа представляются так надо искать в разделах математики.
2. Реализация вычитания, как сложение с дополнительным кодом числа. Тут опять я надеюсь обойдемся без реверс инжиниринга, документальное подтверждение не знаю где, в каких то книгах по информатики
и того 2 - 12 == 2 + @12 так я обозначил доп код 12.
2 == 0010, @12 == @1100 == (~(1100) + 1) == 0011 + 1 == 0100
3. Сложение 2 ичных числе, документальное подтверждение в разделах математики, реверс инжиниринг не применяем
2 - 12 == 2 + @12 == 0010 + @1100 == 0010 + 0100 == 0110 = 6
Теперь у меня вопрос к реверс инжинеру, что я сделал не так?
В данном конкретном случае просто так получается, это здравый смысл физики нашей природы

))) и никакого реверса...
Со знаковыми так не выходит, потому что в 4 битах у них только пол диапазона, то есть дойдя до 0111 до 7, они пойдут дальше до 1000, но в знаковом это -8. Надо понять главное это все представление чисел, это не их значения. Значения у них всегда одно оно не меняется, просто мы решили что 1000 - это -8 для знакового и 8 для без знакового, просто решили все операции происходят с двоичным исходником, всегда одинаково.
То есть важно понять что нет никакой магии или особо указания в том что мы вычитаем именно без знаковые, компилятор не делает ничего особенного увидев эту запись, он делает все те же операции что и обычно, просто результат представляет по другому. Получив в ходе вычитания 1000 для знакового результата он скажет что это -8, а для без знакового скажет что это +8 и все!