Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
целочисленное переполнение.
 
Доброго времени суток товарищи, хотелось бы поинтересоваться кто как борется с напастью в C.

Задача предельно просто:
1) есть два числа типа int, числа могут быть как отрицательными так и положительными.
2) происходит как сложение этих двух чисел, так и вычитание.

Хотелось бы какое-то более менее переносимое решение.

Для положительных чисел ка вариант пришло в голову следующее решение:
Код
if (a - INT_MAX > -b)
{
  printf( "Overflow!!!\n" ); 
}
 
Как ты и сам уже догадался,тебе надо проверять размер суммы, умножения и др. чисел на наличие максимального значений переменных. Например для int размер не должно превышать  65535.
 
Цитата
Например для int размер не должно превышать 65535.
я думаю шестнадцати разрядные машины уже непопулярны
Цитата
тебе надо проверять размер суммы, умножения и др.
это то понятно, интересней как не сложив/не умножив n чисел понять что результат не превышает разрядность. Помоему, на x86, если результат не влазит то в каком то регистре флаг выставляется, подробно не помню.
 
Флаг может где-то и выставляется. Только как ты его проверишь существование не выйдя за границу? Классический метод (может даже единственный) в том и состоит, что надо сделать действие над переменными и проверить результат, на предмет входимости в область существования.
 
Ну пока действительно переносимого решения я так и не встретил, народ кто как с этим сражается.
Страницы: 1
Читают тему