Вы используете uint32_t, означающее unsigned, и затем проверяете условие в цикле for, что i> = 0, поэтому, когда цикл выполняется для значения i = 0, а затем он делает i = -1, но я не подписан, поэтому он сделаетзначение i INT_MAX (что когда-либо поддерживает ваша система).так и до сих пор значение больше 0, так что условие истинно.
И ответ на то, как он печатает отрицательные значения для i, заключается в том, что вы используете «% d» для подписи.
Если вы хотите увидеть результат, вы можете использовать опцию '% u', чтобы он напечатал исходное беззнаковое значение i.
Если вы хотите получить результат, который вы хотите от программы, попробуйтеприведение uint к int во время проверки состояния.