Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.79
azazelpj
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 8
#1

Предел int - C++

17.12.2008, 21:15. Просмотров 3731. Ответов 7
Метки нет (Все метки)

Есть такая игра, Lineage II.
Так вот там если покупать или продавать, что либо, то оно не должно превышать число
2147483648.

У меня задача немного иная, нужно при сложении выдавать ошибку если число больше
2147483648 (9999999999999999999999999999999999999999999999999999999999999999999) и выдавать ошибку если я задал в cin равным или больше 2147483648.

Возник вопрос, как написать такой код для консоли (cmd), я сделал набросок, но мне это не подходит. Если число больше и если меньше, то код выдает Error.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    int b = 2147483648;
    cout<<"Vvod A:";
    cin >> a;
    cout<<"\n";
 
 
if (a => b)
cout<<"Error";
 
else 
cout<<"a = "<<a; 
cout<<"\n";
}
Если я пишу код немного по другому, то выдает число -858993460
Что посоветуете?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2008, 21:15     Предел int
Посмотрите здесь:

C++ error C2664: InputMatrixCurrent: невозможно преобразовать параметр 1 из 'int [5][5]' в 'int'
выдаёт error C2440: =: невозможно преобразовать 'int' в 'int [100] C++
C++ Ошибка - перегруженность pow(int,int) неосуществима. Как исправить?
Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' C++
C++ Предел int или что то еще ?
C++ Преобразовать int в const int для установки размера массива
C++ int\ volatile int \ const int
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AleXX
3 / 0 / 1
Регистрация: 17.12.2008
Сообщений: 10
17.12.2008, 23:07     Предел int #2
Брать не int, а long
А еще лучше double
int 32тыс с чем то только
А 2147483648 это предел long
Больше не взять
azazelpj
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 8
17.12.2008, 23:21  [ТС]     Предел int #3
Вопрос стоял немного другой, нужно взять число больше чем нужно, а именно (9999999999999999999999) и при нажатии ентер вывести ошибку.
AleXX
3 / 0 / 1
Регистрация: 17.12.2008
Сообщений: 10
17.12.2008, 23:31     Предел int #4
тогда вводить строкой.
Если по задани. можно вводить только числа,то достаточно чтобыдлинна строки >10 тогда ошибка.
Если меньше, то все норм. Если равно, то строку через atof() перевести и сравнить с исходным.
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
17.12.2008, 23:33     Предел int #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
 int a;
 cout<<"Vvod A:";
 cin >> a;
 cout<<"\n";
 if (a >= 2147483648)
    cout<<"Error";
 else 
    cout<<"a = "<<a; 
 cout<<"\n";
 return 0;
}
вот работает правильно...
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
17.12.2008, 23:39     Предел int #6
Цитата Сообщение от AleXX Посмотреть сообщение
int 32тыс с чем то только
А 2147483648 это предел long
Больше не взять
Предел int, вообще говоря, зависит от разрядности целевой платформы. 32767 - это только для 16-разрядной платформы.
А вообще говоря, существует еще unsigned long long, для которого предел 2^64 или
18446744073709551615. Для еще больших чисел необходимо применять длинную целочисленную арифметику. А предложение использовать double или atof() при работе с денежными величинами - (censored). Ни в коем случае так нельзя делать. Только целочисленные вычисления и никак иначе.
azazelpj
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 8
18.12.2008, 00:00  [ТС]     Предел int #7
Эммм... а почему так не работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    int b = 2147483648;
    cout<<"Vvod A:";
    cin >> a;
    cout<<"\n";
 
 
if (a >= b)
cout<<"Error";
 
else 
cout<<"a = "<<a; 
cout<<"\n";
return 0;
 
}
Если вместо 2147483648 написать 2147483647, то в итоге ( даже если написать букву ) получится -858993460.
Почему так выходит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2008, 00:02     Предел int
Еще ссылки по теме:

C++ Дано натуральное число N. Напишите функцию int NumberOfZeroes(int n) (C/C++/Java)
C++ Работа с массивом - Invalid types 'int[int]' for array subscript
Как заполнить один int пустой массив другим int массивом ? C++
C++ Ошибка error: invalid types 'int[int]' for array subscript
GetRandomInt( int min, int max ) или Генерация случайных чисел C++

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

Или воспользуйтесь поиском по форуму:
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.12.2008, 00:02     Предел int #8
с double
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
main()
{
    double a;
        
    scanf("%lf", &a);
    if (a > 2147483648.0)
        printf("error: a = %.0lf\n", a);
    return 0;
}
максимум в long int может поместиться 32 бита, в signed long int тоже но старший (самый левый) бит показывает знак числа, а остальное остаётся для самого числа, то есть 31 бит под число остаётся 2147483647,5 максимальное

11111111 11111111 11111111 11111111

sizeof(double) у меня = 8 байт, т.е. это 64 бита, потому там может поместиться 1.84467440737e+19 число

long int и signed long int одно и то же по-умолчанию, есть ещё unsigned long int, вот у него старший бит считается не знаковым а просто как часть остального числа поэтому в таких числах нет отрицательных значений (они есть но не рассматриваются как отрицательные) но благодаря этому число увеличивается до 4294967295
Yandex
Объявления
18.12.2008, 00:02     Предел int
Ответ Создать тему
Опции темы

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