Почему этот код работает ошибочно?
Потому что %d трактует переданное значение как signed int.
Поставьте %u и получите беззнаковое значение UINT_MAX (0xFFFFFFFF).
Но ноль всё равно не получите, операции с беззнаковыми числами в C выполняются по модулю (UINT_MAX+1).
Всё работает правильно. Чтобы отобразить число как unsigned, вместо %d следует использовать %u.