Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Логика работы цикла


learner ©   (2006-07-08 16:59:00) 

Почему так происходит ?
MaxIndex: integer;
MaxIndex:= -1;
for i:=0 to MaxIndex do ShowMessage(IntToStr(i));

И цикл начинает выдавать сообщения : 1, 2, 3, и т. д.


learner   (2006-07-08 18:50:00) [1]

Спасибо.


Шпиён   (2006-07-08 17:15:00) [2]


> begin...end ©   (08.07.06 17:12) [2]

Хочу лишь добавить, что верхняя граница цикла будет зависеть от размерности  типа i:
byte - 255
word - 65535
dword, Longword, Cardinal - 4294967295


Шпиён   (2006-07-08 17:15:00) [3]


> begin...end ©   (08.07.06 17:14) [3]

Синхронное плавание -))))))))))


begin...end   (2006-07-08 17:14:00) [4]

Если же i объявлено как одно- или двухбайтное беззнаковое целое, то цикл будет прокручиваться соответственно до 255 и до 65535.


begin...end   (2006-07-08 17:12:00) [5]

> learner ©   (08.07.06 16:59) [0]

> Почему так происходит ?

Скорее всего, потому, что переменная iобъявлена как БЕЗзнаковое целое . Дело здесь вот в чём. Четырёхбайтное (integer) знаковое число "-1" имеет то же самое внутреннее представление ($FFFFFFFF), что и четырёхбайтное безнаковое число "4294967295". И если i -- это именно четырёхбайтное беззнаковое целое, то компилятор устанавливает верхнюю границу цикла равную именно 4294967295. Соответственно этому цикл и прокручивается.


Шпиён   (2006-07-08 17:11:00) [6]

А какого типа переменная i?
Если i - беззнаковое (word, byte, dword и т.п.) - то так и получится, потому что MaxIndex будет неявно приведен к типу i -)


Наверх

Титульная страница Поиск, карта сайта Написать письмо