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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
#1

Что если число будет слишком большим и не поместиться в int? - C++

17.03.2014, 05:23. Просмотров 1553. Ответов 37
Метки нет (Все метки)

Собственно есть char*, надо в int. Вроде есть atoi для этих целей. Но тут появляется пара неудобных вопросов:
1) Что если число будет слишком большим и не поместиться в инт?
2) Скорее теоретически, т.к. не цифры отсекаются при формировании входного char*, но тем не менее: что если в char* будут не только цифры?

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 05:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что если число будет слишком большим и не поместиться в int? (C++):

Если первое число окажется кратным 5 или второе число будет нечетным, то вывести на экран сумму их модулей - C++
4. Даны два числа N и М. Если первое число окажется кратным 5 или второе число будет нечетным, то вывести на экран сумму модулей заданных...

Как в выделенную память записать поочередно число int, массив char[n], и еще число int - C++
Выделяю память void* Start=malloc(Size); Как туда записать поочередно число int, массив char, и еще число int?

Что будет если так сделать? - C++
Всем привет! Что будет если применить такую конструкцию int global; void Test(const int& a) { global = a; } То...

Как получить число типа int, если имеется указатель на строку с этим числом? - C++
допустим у меня есть строка " 45"; и указатель на нее string *str; как получить из нее число 45 в виде int?

Работа со стеком. Если массив нужен float, а не int, что необходимо изменить - C++
#include <iostream> #include <stdlib.h> using namespace std; // ****************СТЕК НА ОСНОВЕ МАССИВА*************** const int N =...

Что будет, если new вызвать 2 раза с одним и тем же указателем? - C++
Собственно вопрос что будет? напрмер int *i=new(1); i=new(3); i будет сылаться на ячеку со значенеим 3 это ясно, а куда денется ячейка со...

37
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.03.2014, 13:04 #31
Цитата Сообщение от alsav22 Посмотреть сообщение
вместо UB, просто выдаёт максимально допустимое значение для типа
Так UB на то и UB, что может быть и такой вариант

Добавлено через 7 минут
Посмотрел в С++03 22.2.2.1.2/11:
Stage 3:
The result of stage 2 processing can be one of
— A sequence of chars has been accumulated in stage 2 that is converted (according to the rules of scanf) to a value of the type of val. This value is stored in val and ios_base::goodbit is stored inerr.
— The sequence of chars accumulated in stage 2 would have caused scanf to report an input failure. ios_base::failbit is assigned to err.
Т.е. в случае ошибки про итоговое значение ничего не сказано. Следовательно, м.б. любым. И, кстати, про использование atoi() в этой цепочке ничего не сказано.
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 13:04 #32
Цитата Сообщение от Tulosba Посмотреть сообщение
Так UB на то и UB, что может быть и такой вариант
В студии может быть какой-либо другой вариант? Если да, то как получить другой вариант? Если нет, то в чём тогда UB?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.03.2014, 13:20 #33
Цитата Сообщение от alsav22 Посмотреть сообщение
В студии может быть какой-либо другой вариант?
2010 и 2012 студии ведут себя одинаково. При выходе из диапазона значение переменной не меняют (т.е. внутри они конечно возвращают LONG_MIN или LONG_MAX, но до пользователя оно не доходит), устанавливают errno = ERANGE;
Можете сами попробовать пройтись отладчиком.
Цитата Сообщение от alsav22 Посмотреть сообщение
Если нет, то в чём тогда UB?
Разговор про UB был относительно atoi(), если я ничего не путаю. А при чтении числа из потока (std::istream) atoi() не используется по факту. Есть фактически нечто похожее на требование C++11 (всякие _Stoulx() вместо std::strtoull()), но итоговое поведение не соответствует C++11.
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 13:33 #34
Цитата Сообщение от Tulosba Посмотреть сообщение
Разговор про UB был относительно atoi(), если я ничего не путаю.
Я про неё и спрашиваю. В студии atoi(), при числе больше максимально допустимого, возвращает максимально допустимое.
Цитата Сообщение от Tulosba Посмотреть сообщение
Так UB на то и UB, что может быть и такой вариант
Цитата Сообщение от alsav22 Посмотреть сообщение
В студии может быть какой-либо другой вариант? Если да, то как получить другой вариант? Если нет, то в чём тогда UB?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.03.2014, 13:49 #35
Цитата Сообщение от alsav22 Посмотреть сообщение
Я про неё и спрашиваю.
atoi() это сишная функции и описание следует смотреть в сишном стандарте уже. Вот в C99 такое есть:
7.20.1 Numeric conversion functions:
The functions atof, atoi, atol, and atoll need not affect the value of the integer expression errno on an error. If the value of the result cannot be represented, the behavior is undefined.
Если студия ведет себя более очевидным образом это ей только в плюс. Но не стоит надеяться, что другие реализации будут вести себя аналогично.
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 14:28 #36
Цитата Сообщение от Tulosba Посмотреть сообщение
Если студия ведет себя более очевидным образом это ей только в плюс. Но не стоит надеяться, что другие реализации будут вести себя аналогично.
Я правильно понял, что в студии это не UB?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.03.2014, 14:40 #37
Цитата Сообщение от alsav22 Посмотреть сообщение
Я правильно понял, что в студии это не UB?
Как себя ведёт студия, надо смотреть в доке по студии.
http://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 14:51 #38
Значит, в студии, это не UB.
0
18.03.2014, 14:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 14:51
Привет! Вот еще темы с ответами:

Для чего используется _getch() и что будет, если ее не использовать? - C++
_getch(); 1)для чего это? 2)что будет,если написать без него? ..... cout << "периметр равен:" << " " << p << endl; ...

Intel Intrinsic. Что будет, если объявить много __m128 переменных? - C++
Использую функции для работы с xmm-регистрами. У меня на машине их 16, однако компилятор позволяет объявлять переменные типа __m128 сколь...

Зачем преобразовывать itsVal в int, если эта переменная и так объявлена как тип int - C++
// Оператор преобразования #include <iostream> using namespace std; class Counter { public: Counter(): itsVal(0) {} ...

Что будет, если два раза динамически выделить память по одному указателю? - C++
Например: int *mas = new int; mas = new int;


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

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

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