ПредишенСледващото

Цяло число преливник

Y вече ОУ знаете, че може да се появи добавянето на толкова, колкото преливник. Уловката е, че компютърът не издава предупреждения за преливане: програмата ще продължи да работи с невярна информация. Освен това, поведението на преливника се определя само за число без знак.

Overflow може да доведе до сериозни проблеми: връщане в изходно положение и загуба на данни, е възможно да се използва едва доловими грешки, които ще се натрупват с течение на времето.
Помислете за няколко трика за проследяване преливане подписани числа и число преливане неподписан.

1. Предварително валидиране. Знаем от limits.h файл, че максималната и минималната стойност за броя на тип Int. Ако и двете числа са положителни, че сумата им не надвишава INT_MAX, ако INT_MAX разлика и един от номерата по-малки от второто число. Ако и двете числа са отрицателни, тогава INT_MIN разлика и една от номера трябва да бъде по-голям от другия. Ако и двете числа са с различни знаци, след което ясно сумата им не надвишава INT_MAX или INT_MIN.

В тази функция, променлива преливане ще бъде настроен на 1, ако има преливник. Функцията връща сумата, независимо от резултата на добавянето.

2. Вторият метод на изпитване - да за типа сума, максималната (и минимум) стойност, която определено е по-голяма от сумата на двете цели числа. След добавянето е необходимо да се провери, че сумата не е била повече. INT_MAX-малка или по-малко от INT_MIN.

Имайте предвид изричното актьорския състав. Без него първо се случва преливник и неправилен брой се изписва на променливата в.

3. Третият метод за проверка за платформа, освен това, реализацията му ще бъде различна за различните компилатори. Когато преливни числа (обикновено), лежащи преливник флаг в знамената се регистрирате. Можете да проверите стойността на асемблер флаг веднага след сумирането.

Тук noOverflow променлива, равна на 1, ако няма преливане. jno (скок, ако няма преливане) изпълнява скок на NO_OVERFLOW на етикета, ако няма преливане. Ако след това се провежда преливникът

Справяне с неподписани числа е много по-просто: Overflow случва нула и е известно, че полученото число със сигурност е по-малко от един мандат.

Ето и пълния код, с инспекции.

RU-Cyrl 18- Упътване Sypachev S.S. 1989-04-14 [email protected] Степан Sypachev студенти

Подкрепете проекта - споделете линка, благодаря!