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

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

Как проверить переполнение?


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;

Ну учите же язык-то!


Наверх

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