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

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

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

Предел int - C++

17.12.2008, 21:15. Просмотров 3824. Ответов 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
Посмотрите здесь:

Предел int или что то еще ? - C++
Задание: Определить входит ли введенная цифра в заданное натуральное число. Вот что у меня получилось: #include &lt;iostream.h&gt; void...

GetRandomInt( int min, int max ) или Генерация случайных чисел - C++
Это программа, генерирующая случайное имя и приветствие. Но вот почему-то, случайность выпадения чисел одинаковая при каждом включении...

Как заполнить один int пустой массив другим int массивом ? - C++
Можно пример кода :)

Дано натуральное число N. Напишите функцию int NumberOfZeroes(int n) (C/C++/Java) - C++
Дано натуральное число N. Напишите функцию int NumberOfZeroes(int n) (C/C++/Java), function NumberOfZeroes(n: longint): integer (Pascal),...

Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' - C++
есть 3 файла. файл inc.h: ... template &lt;class T&gt; class My { int m_size; T *m_data; public: My(int value); ~My(); ...

Error С2664. Параметр 1 не может быть преобразован из 'int' в 'int [][10]' - C++
Добрый день! Компилятор &quot;ругается&quot; на описание функции. Как устранить данную проблему самому не знаю. Заранее благодарю за помощь! ...

выдаёт error C2440: =: невозможно преобразовать 'int' в 'int [100] - C++
Ввести информацию об абонентах телефонной станции: фамилия, телефон, улица. Распечатать список абонентов 65-й АТС, проживающих на улице...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,354
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
Еще ссылки по теме:

error C2664: InputMatrixCurrent: невозможно преобразовать параметр 1 из 'int [5][5]' в 'int' - C++
Помогите поправить код, а то выдаёт ошибки #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; void...

Работа с массивом - Invalid types 'int[int]' for array subscript - C++
Добрый день. Данный код выдает ошибку invalid types 'int' for array subscript в функции в строке cout &lt;&lt;dm; Не понимаю в чем ошибка....

Ошибка - перегруженность pow(int,int) неосуществима. Как исправить? - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; struct point { int x,y,z; }; double dlina(point a,point b) { ...

Правильное объявление переменной с точки зрения стиля [int *a vs int* a] - C++
И всё таки, как корректней объявлять переменные? 1. int* a, int&amp; a, int** a или 2. int *a, int &amp;a, int **a ?

Ошибка error: invalid types 'int[int]' for array subscript - C++
Дана строка,содержащая английский текст.Найти количество слов,начинающихся с буквы b. Выдает ошибку в 29 строке:error: invalid types...


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

Или воспользуйтесь поиском по форуму:
accept
4820 / 3240 / 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
Ответ Создать тему
Опции темы

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