Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
#1

Exeption на переполнение int - C++

21.11.2014, 22:31. Просмотров 565. Ответов 6
Метки нет (Все метки)

как называется ексепшен который бы поймал эту ошибку?(переполнение int, типа если в переменную положится число больше чем 2 147 483 647 - ведь ет максимальный размер вроде переменной:?)) Если таков вообще есть
Знаю можно ловить все ошибки сразу типа catch(...) но мне надо то что выше описал или что-то типа того
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 22:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Exeption на переполнение int (C++):

Проверить int на переполнение - C++
Здорова! Нужно как то проверить int на переполнение. А я вообще не пойму, что понимается под переполнением. Это что как бы выход за...

Переполнение при вводе int - C++
Такой вот вопросик. есть переменная а типа integer, пользователь вводит число с клавиатуры, так вот если пользователь введет допусти...

Как отловить переполнение границ типа (INT)? - C++
Сразу напишу пример для наглядности: int fx = -2147483648 if(fx == -fx) { //ляляля } В 32 битах максимум и минимум...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #define row 5 #define col 5 using namespace...

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.? - C++
Не понимаю, с чего начинать. Заранее спс.

6
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
21.11.2014, 22:35 #2
Нет такой ошибки. В int попадёт столько, сколько влезет.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3945 / 2169 / 553
Регистрация: 18.10.2014
Сообщений: 3,783
21.11.2014, 22:45 #3
Цитата Сообщение от Lynatik001 Посмотреть сообщение
как называется ексепшен который бы поймал эту ошибку?
Никак.

* Если переполнение знакового целого типа возникает в процессе вычисления выражения, то поведение программы не определено.
* Если переполнение знакового целого типа возникает при приведении большего по диапазону целого типа к меньшему по диапазону, то поведение определяется реализацией.
* Беззнаковые целые типы не "переполняются" вообще, они реализуют арифметику "по модулю".

Более того, опираясь на вышеприведенные правила, современные компиляторы реализуют оптимизации, основанные на так называемой strict overflow semantics (строгая семантика переполнения). Согласно вышеприведенным правилам, компилятор имеет право полагать, что для знаковых целых типов из b>0 всегда следует a+b>a. Это значит, что компилятор имеет право заменить вот такой "хакерский" цикл

C++
1
2
for (int i = 0; i >= 0; ++i)
  // что-то
на бесконечный цикл

C++
1
2
for (int i = 0; ; ++i)
  // что-то
Другими словами, компиляторы имеют право оптимизировать код в рамках предположения, что целочисленные знаковые типа никогда не переполняются. Это означает, что все переполнения вы должны отлавливать самостоятельно.
1
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
21.11.2014, 22:56  [ТС] #4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Никак.
понял.
у мну задание сделать событие на переполнение розрядной сетки. - это я ведь понял размер int ну в задании его надо использовать.
я так понял Просто делать проверку?
ли сума и введеные данные не больше 2 147 483 647, если больше вызивать событие?

Добавлено через 5 минут
кстати если пользователь введет число больше чем поместится в переменную каким експешеном его обработать
через
C#
1
int g = Convert.ToInt32(Console.ReadLine());
0
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
21.11.2014, 22:59 #5
Ты можешь вызывать исключение в своём алгоритме типа overflow_error, но само оно не возникает.
0
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
21.11.2014, 23:03  [ТС] #6
а тю компилятор мне сказал какой експепшен сам
System.OverflowException

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Ты можешь вызывать исключение в своём алгоритме типа overflow_error, но само оно не возникает.
Возникает
C#
1
int g = Convert.ToInt32(Console.ReadLine());
и введи 333333333333333333333333333333333333333333333333333333333333333333333333
выведет что программа завершилась с вот таким ексепшеном)
поставил
C#
1
2
3
4
5
6
7
8
            try
            {
                int g = Convert.ToInt32(Console.ReadLine());
            }
            catch (System.OverflowException e)
            {
 
            }
Отлично его ловит
Ой пардон не в тот раздел написал походу C# ведь
0
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
22.11.2014, 08:49 #7
В Builder и C# такое может и есть при преобразовании, но не при арифметических операциях.
0
22.11.2014, 08:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2014, 08:49
Привет! Вот еще темы с ответами:

[Linker error] undefined reference to `sterling(int, int, int)' - C++
#include &lt;iostream&gt; using namespace std; int sterling(int,int,int); int sterling(int,int); int sterling(int); int main() { ...

[Linker Error] Unresolved external 'Sort(int near*near ,int, int) - C++
не могу понять в чем ошибка при компиляции ошибок не выдает при запуске программы - выдает эту ошибку Unresolved external 'Sort(int...

int main() и int _tmain(int argc, _TCHAR* argv[]) - C++
При создании нового консольного приложения Microsoft Visual С++ 2010 Express создает начальный шаблон #include &quot;stdafx.h&quot; int...

Написать функцию типа Beaty(int iA, int iB, int *pc) - C++
Задание: Написать функцию типа Beaty(int iA, int iB, int *pc); для выражения (iA+iB)/(iA*iB). Помогите решить!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru