Целые числа
Целые числа встречаются почти в каждой задаче: количество, номер, шаг цикла, год, расстояние в метрах и т.п.
В Java для таких значений обычно используется тип int.
Основное
Переменная целого типа объявляется так:
Примеры:
Основные операции над int:
| Операция | Знак |
|---|---|
| сложение | + |
| вычитание | - |
| умножение | * |
| целочисленное деление | / |
| остаток от деления | % |
Диапазон int
int – 32-битное знаковое целое число.
То есть от \(-2\,147\,483\,648\) до \(2\,147\,483\,647\).
Примеры выражений для int
| Выражение | Значение | Комментарий |
|---|---|---|
20 + 3 |
23 |
сложение |
20 - 3 |
17 |
вычитание |
20 * 3 |
60 |
умножение |
20 / 3 |
6 |
целочисленное деление, дробная часть отбрасывается |
20 % 3 |
2 |
остаток |
20 / 0 |
ошибка | деление на ноль |
2147483647 + 1 |
-2147483648 |
переполнение int |
Переполнение int
Если результат вычисления не помещается в диапазон int, значение переполняется и «переворачивается» по модулю \(2^{32}\).
Пример:
Программа выведет:
Тип int
int хранит целые числа без дробной части.
Для счётчиков, номеров и большинства простых вычислений этого достаточно.
Основные арифметические операции
int a = 7;
int b = 3;
int sum = a + b; // 10
int diff = a - b; // 4
int prod = a * b; // 21
int div = a / b; // 2
int mod = a % b; // 1
a / b для int – это деление с отбрасыванием дробной части.
a % b – остаток от деления a на b.
Целочисленное деление и остаток
В математике деление даёт дробь: \(7 / 3 \approx 2.333\ldots\).
В int-делении сохраняется только целая часть:
Всегда выполняется связь:
Пример:
int minutes = 130;
int hours = minutes / 60; // 2
int rest = minutes % 60; // 10
System.out.println(hours + " ч " + rest + " мин"); // 2 ч 10 мин
Скобки и порядок действий
Сначала выполняются *, /, %.
Затем выполняются + и -.
Скобки можно использовать, чтобы явно задать порядок:
Ещё один частый момент – операции одного уровня считаются слева направо:
| Выражение | Значение |
|---|---|
3 - 5 - 2 |
-4 |
(3 - 5) - 2 |
-4 |
3 - (5 - 2) |
0 |
Примеры использования
Сумма, разность, произведение, целая часть и остаток:
int a = 7;
int b = 3;
System.out.println(a + b); // 10
System.out.println(a - b); // 4
System.out.println(a * b); // 21
System.out.println(a / b); // 2
System.out.println(a % b); // 1
Последняя цифра и количество десятков:
int n = 538;
int lastDigit = n % 10; // 8
int tens = n / 10; // 53
System.out.println(lastDigit); // 8
System.out.println(tens); // 53
Когда нужен long
int подходит, когда значения гарантированно небольшие. Но иногда даже обычные по смыслу величины могут не поместиться в int.
Типичные ситуации, когда int становится мало:
- произведение или сумма многих чисел (например, несколько умножений подряд);
- счёт в миллисекундах/наносекундах;
- большие количества (население, объём данных, число комбинаций и т.п.).
Диапазон long
long – 64-битное знаковое целое число.
То есть от \(-9\,223\,372\,036\,854\,775\,808\) до \(9\,223\,372\,036\,854\,775\,807\).
Правило выбора типа
Если числа точно маленькие – используйте int.
Во всех остальных случаях безопаснее сразу брать long.
Что нужно запомнить
Целые числа в Java обычно хранят в типе int.
Деление int / int даёт целую часть, остаток берётся через %.
Если есть риск, что число не поместится в int, используйте long.
В C++ для целых чисел обычно используют тип int.
Основное
Переменная целого типа объявляется так:
Примеры:
Основные операции над int:
| Операция | Знак |
|---|---|
| сложение | + |
| вычитание | - |
| умножение | * |
| целочисленное деление | / |
| остаток от деления | % |
Диапазон int
В C++ диапазон int зависит от платформы, но обычно это 32-битное знаковое число.
Примеры выражений для int
| Выражение | Значение | Комментарий |
|---|---|---|
99 |
99 |
целочисленный литерал |
+99 |
99 |
унарный плюс |
-99 |
-99 |
унарный минус |
5 + 3 |
8 |
сложение |
5 - 3 |
2 |
вычитание |
5 * 3 |
15 |
умножение |
5 / 3 |
1 |
целочисленное деление, дробная часть отбрасывается |
5 % 3 |
2 |
остаток |
1 / 0 |
ошибка | деление на ноль |
a / b для int – это деление с отбрасыванием дробной части.
a % b – остаток от деления a на b.
Целочисленное деление и остаток
В математике деление даёт дробь: \(7 / 3 \approx 2.333\ldots\).
В int-делении сохраняется только целая часть:
Всегда выполняется связь:
Пример:
int minutes = 130;
int hours = minutes / 60; // 2
int rest = minutes % 60; // 10
std::cout << hours << " ч " << rest << " мин\n";
Скобки и порядок действий
Умножение и деление (*, /, %) выполняются раньше сложения и вычитания (+, -).
Скобки можно использовать, чтобы явно задать порядок:
Операции одного уровня считаются слева направо:
| Выражение | Значение |
|---|---|
3 - 5 - 2 |
-4 |
(3 - 5) - 2 |
-4 |
3 - (5 - 2) |
0 |
Примеры использования
Сумма, разность, произведение, целая часть и остаток:
#include <iostream>
int main() {
int a = 7;
int b = 3;
std::cout << (a + b) << "\n"; // 10
std::cout << (a - b) << "\n"; // 4
std::cout << (a * b) << "\n"; // 21
std::cout << (a / b) << "\n"; // 2
std::cout << (a % b) << "\n"; // 1
return 0;
}
Перевод минут в часы и минуты:
#include <iostream>
int main() {
int minutes = 130;
int hours = minutes / 60;
int rest = minutes % 60;
std::cout << hours << " ч " << rest << " мин\n"; // 2 ч 10 мин
return 0;
}
Последняя цифра и количество десятков:
#include <iostream>
int main() {
int n = 538;
int lastDigit = n % 10; // 8
int tens = n / 10; // 53
std::cout << lastDigit << "\n"; // 8
std::cout << tens << "\n"; // 53
return 0;
}
Что нужно запомнить
Деление int / int даёт целую часть, остаток берётся через %.
Для дробных результатов удобно переводить выражение в double (например, делить на 2.0, а не на 2).
В Python целые числа имеют тип int.
Основное
Переменная появляется в момент присваивания:
Основные операции над целыми числами:
| Операция | Знак |
|---|---|
| сложение | + |
| вычитание | - |
| умножение | * |
| деление | / |
| целочисленное деление | // |
| остаток от деления | % |
Примеры выражений
| Выражение | Значение | Комментарий |
|---|---|---|
99 |
99 |
целое число |
+99 |
99 |
унарный плюс |
-99 |
-99 |
унарный минус |
5 + 3 |
8 |
сложение |
5 - 3 |
2 |
вычитание |
5 * 3 |
15 |
умножение |
5 / 3 |
1.6666666666666667 |
обычное деление всегда дробное |
5 // 3 |
1 |
целая часть |
5 % 3 |
2 |
остаток |
1 // 0 |
ошибка | деление на ноль |
Деление и остаток
В Python обычное деление / всегда даёт дробное число.
Для целой части используют //.
Всегда выполняется связь:
Пример:
Скобки и порядок действий
Умножение и деление (*, /, //, %) выполняются раньше сложения и вычитания (+, -).
Скобки можно использовать, чтобы явно задать порядок:
Примеры использования
Сумма, разность, произведение, целая часть и остаток:
Перевод минут в часы и минуты:
Последняя цифра и количество десятков:
Что нужно запомнить
В Python целые числа – это int.
/ даёт дробный результат, // – целую часть, % – остаток.
Какие типы использовать
| Язык | Базовый тип для «обычных» чисел | Для больших чисел | Что важно помнить |
|---|---|---|---|
| Java | int |
long |
int всегда 32-битный, long всегда 64-битный. |
| C++ | int |
long long |
Размер int зависит от платформы, long long – не меньше 64 бит. |
| Python | int |
int |
Целые числа растут по мере надобности (ограничение – память). |
Пример: счётчик дней или количество учеников – обычно int. Количество миллисекунд или большое произведение – часто уже требует long (Java) или long long (C++).
Диапазон и переполнение
| Язык | Что происходит, если число не помещается |
|---|---|
| Java | Для int и long значение «переворачивается» по модулю \(2^{32}\) или \(2^{64}\). Ошибки компиляции нет. |
| C++ | Переполнение знакового int/long long может давать непредсказуемый результат. На это нельзя рассчитывать. |
| Python | Переполнения как у int нет, но большие числа становятся медленнее и занимают больше памяти. |
Если в Java или C++ есть риск переполнения, обычно переходят на более широкий тип (long / long long) и стараются делать вычисления в этом типе.
Деление целых
| Язык | Как получить целую часть | Как получить дробный результат |
|---|---|---|
| Java | a / b (оба целые) |
сделать один операнд double: (double) a / b или a / 2.0 |
| C++ | a / b (оба целые) |
сделать один операнд double: (double) a / b или a / 2.0 |
| Python | a // b |
a / b |
Остаток и отрицательные числа
Для положительных чисел % ведёт себя одинаково.
Отличие появляется с отрицательными:
Java и C++ делят «к нулю», поэтому остаток имеет знак делимого.
Python делает // как деление «вниз», поэтому % согласован с //.
Пример:
Java: -7 / 3 → -2, -7 % 3 → -1.
C++: -7 / 3 → -2, -7 % 3 → -1.
Python: -7 // 3 → -3, -7 % 3 → 2.
Где чаще всего ошибаются
В Java/C++ ожидают дробь от a / b, но получают целую часть.
В выражении перемешивают типы и теряют дробную часть: int avg = (a + b) / 2;.
В Java не замечают переполнение int.
В C++ рассчитывают на поведение при переполнении – так делать нельзя.
В Python используют // и не учитывают, что с отрицательными оно работает «вниз».