Текущий архив: 2002.06.17;
Скачать: CL | DM;
ВнизКак проверить переполнение? Найти похожие ветки
← →
Navi1982 (2002-06-05 13:23) [0]Ситуация такая, что надо узнать "произошло ли переполнение при сложении? и если да то ..."
Например такое возможно?
x:=x+10;
if переполнение then действие.
← →
Shaman_Naydak (2002-06-05 13:25) [1]try
x:=x+10;
except
действие
end;
Ну учите же язык-то!
← →
Kaban (2002-06-05 13:35) [2]2 Shaman_Naydak
Ты бы попробовал сначала на практике, а потом писал
var X : Byte;
try
x:=250;
x:=x+10;
except
действие
end;
не вызывает ошибку
может быть так:
if Max(x) - 10 < x then
Написать функцию Max, которая возвращала бы максимальное значение для каждого типа переменной
← →
MBo (2002-06-05 13:50) [3]>не вызывает ошибку
обсуждается еженедельно - вычисление на этапе компиляции, и неиспользуемая переменная выбрасывается при оптимизации
i:shortint;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
i:=i+30;
label1.caption:=inttostr(i);
except
///
end;
end;
← →
Kaban (2002-06-05 14:05) [4]2MBo
Ни и что?
сейчас попробовал
для переменной типа Byte r 250 прибавил 30 получил в caption значение 24
Мой ответ неверный?
← →
MBo (2002-06-05 14:07) [5]включил Range Checking?
← →
Kaban (2002-06-05 14:13) [6]2MBo Ну да правильно не стоит(в смысле флажок).
← →
Kaban (2002-06-05 14:18) [7]Мои извенения 2 Shaman_Naydak
← →
Digitman (2002-06-05 17:54) [8]строго частный случай.
тем не менее решает задачу :
label
ovrflow;
var
x: integer;
...
x:= 2147483646;
x:= x + 10;
asm
mov eax, [a]; // чтобы оптимизатор не лез не в свои дела))
jo ovrflow
end;
exit;
ovrflow:
showmessage("Overflow !");
← →
Digitman (2002-06-05 17:54) [9]строго частный случай.
тем не менее решает задачу :
label
ovrflow;
var
x: integer;
...
x:= 2147483646;
x:= x + 10;
asm
mov eax, [x]; // чтобы оптимизатор не лез не в свои дела))
jo ovrflow
end;
exit;
ovrflow:
showmessage("Overflow !");
Страницы: 1 вся ветка
Текущий архив: 2002.06.17;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.007 c