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