Текущий архив: 2006.07.30;
Скачать: CL | DM;
Вниз
Логика работы цикла Найти похожие ветки
← →
learner © (2006-07-08 16:59) [0]Почему так происходит ?
MaxIndex: integer;
MaxIndex:= -1;
for i:=0 to MaxIndex do ShowMessage(IntToStr(i));
И цикл начинает выдавать сообщения : 1, 2, 3, и т. д.
← →
Шпиён (2006-07-08 17:11) [1]А какого типа переменная i?
Если i - беззнаковое (word, byte, dword и т.п.) - то так и получится, потому что MaxIndex будет неявно приведен к типу i -)
← →
begin...end © (2006-07-08 17:12) [2]> learner © (08.07.06 16:59) [0]
> Почему так происходит ?
Скорее всего, потому, что переменная i объявлена как БЕЗзнаковое целое. Дело здесь вот в чём. Четырёхбайтное (integer) знаковое число "-1" имеет то же самое внутреннее представление ($FFFFFFFF), что и четырёхбайтное безнаковое число "4294967295". И если i -- это именно четырёхбайтное беззнаковое целое, то компилятор устанавливает верхнюю границу цикла равную именно 4294967295. Соответственно этому цикл и прокручивается.
← →
begin...end © (2006-07-08 17:14) [3]Если же i объявлено как одно- или двухбайтное беззнаковое целое, то цикл будет прокручиваться соответственно до 255 и до 65535.
← →
Шпиён (2006-07-08 17:15) [4]
> begin...end © (08.07.06 17:12) [2]
Хочу лишь добавить, что верхняя граница цикла будет зависеть от размерности типа i:
byte - 255
word - 65535
dword, Longword, Cardinal - 4294967295
← →
Шпиён (2006-07-08 17:15) [5]
> begin...end © (08.07.06 17:14) [3]
Синхронное плавание -))))))))))
← →
learner © (2006-07-08 18:50) [6]Спасибо.
Страницы: 1 вся ветка
Текущий архив: 2006.07.30;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.031 c