printf
не знает о типе аргумента, который вы ему даете.С %d
вы говорите, что это со знаком int
, что неправильно.Это неопределенное поведение - все может случиться.Вероятно, случится так, что она все равно будет интерпретировать эту память как подписанную int
, а с помощью unsigned int a=-10;
вы установите для unsigned int значение, которое будет интерпретироваться как -10
при чтении со знаком int
.Для получения дополнительной информации о том, что происходит с присвоением отрицательного числа типу без знака, проверьте этот ответ .