Подписанные int и unsigned int имеют одинаковый размер в памяти, единственное различие между ними заключается в том, как вы их интерпретируете. Значения со знаком используют двойное представление дополнения.
Если вы поместите 0xFFFFFFFF в 4-байтовую ячейку памяти, а затем спросите, какое там значение? Хорошо, если мы интерпретируем его как целое число со знаком, то оно равно -1, но если мы интерпретируем его как целое число без знака, тогда значение равно 4294967295. В любом случае, это тот же битовый шаблон, разница в том, что вы ему даете.
Когда вы присвоили 10 - 20 целому числу без знака, вы вычислили значение -10 (C не выполняет переполнение или проверку недостаточного значения), это битовая комбинация 0xFFFFFFF6, что означает -10 в целочисленном или 4294967286 в неподписанном Int. Если вы затем скажете компилятору (используя% i) печатать int со знаком, тогда он интерпретирует этот битовый шаблон как int со знаком и печатает -10, если вы сказали компилятору (используя% u) напечатать int без знака, тогда он интерпретирует этот битовый шаблон как беззнаковый и печатает 4294967286.