не могу разобраться с типом int в Си

Компьютеры программирование программы C++

вот код, который за каждую итерацию while отнимает от i 8, пока i > 0. работает код хорошо.
Почему условие while не выполняется, если для i выбрать тип не int, а unsigned int?

http://pastebin.com/jC2Y2eCz

Примечание:
я в курсе, но только если выбрать unsigned, то while (i > 0) не выполняется, а если стоит просто int - все ок.
вот часть выхлопа с unsigned int i
http://pastebin.com/x1hMWJWr
Ответы:
ансигнед - это значит без знака (т.е. только неотрицательные числа)
Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. Следовательно i в вашем случае всегда будет >0. Так же хоть я и не уверен возможно будет возникать ошибка если i равно к примеру 7.
Обьясняю:
Если вы применили тип unsigned int, то переменная не может принимать значения меньше нуля. Соответственно для ситуации когда, к примеру, из текущего значения переменной равного 5 вычитаетсаы 8, то происходит численное переполнение, и переменная становится равна своему максимальному значению минус 3. Все значения этого типа будут больше или равны нулю, поэтому цикл не остановится, если только i не будет равно именно 0 в какой-то момент.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.