← Назад к вопросам

Какое максимальное значение у знакового 32-битного int?

1.0 Junior🔥 141 комментариев
#JVM и память#Kotlin основы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Максимальное значение 32-битного знакового int

Максимальное значение для 32-битного знакового целого числа (signed 32-bit integer), обычно представленного типом int в Java/Kotlin для Android-разработки, составляет 2 147 483 647.

Почему именно это число?

Вот подробное объяснение:

  1. Битовая структура:

    • 32-битное целое число использует 32 бита (двоичных разряда) для хранения значения.
    • Для знаковых целых чисел один бит (старший бит) используется для указания знака: 0 для положительных чисел, 1 для отрицательных.
    • Остается 31 бит для представления абсолютного значения.
  2. Расчет максимального значения:

    • Максимальное положительное значение достигается, когда бит знака равен 0, а все остальные 31 бит равны 1.
    • Это соответствует двоичному числу: 0111 1111 1111 1111 1111 1111 1111 1111 (31 единица после знакового бита).
    • Чтобы преобразовать это в десятичную систему:
      2^31 - 1 = 2 147 483 647
      
    • Почему 2^31 - 1, а не 2^31? Потому что одно из значений (ноль) также должно быть представлено, и диапазон делится между положительными и отрицательными числами.

Диапазон значений int в Java/Kotlin

Для типа int в Android (Java/Kotlin) полный диапазон следующий:

Минимальное значение: -2 147 483 648
Максимальное значение:  2 147 483 647

Вот как это выглядит в коде:

fun demonstrateIntLimits() {
    val maxInt = Int.MAX_VALUE
    val minInt = Int.MIN_VALUE
    
    println("Максимальное значение int: $maxInt")  // 2147483647
    println("Минимальное значение int: $minInt")   // -2147483648
    
    // Попытка превысить максимум приведет к переполнению
    val overflow = maxInt + 1
    println("maxInt + 1 = $overflow")  // -2147483648 (переполнение)
}
public class IntExample {
    public static void main(String[] args) {
        System.out.println("Максимальное int: " + Integer.MAX_VALUE);
        System.out.println("Минимальное int: " + Integer.MIN_VALUE);
        
        // Проверка на переполнение
        int max = Integer.MAX_VALUE;
        int overflow = max + 1;
        System.out.println("MAX + 1 = " + overflow); // -2147483648
    }
}

Практическое значение для Android-разработчика

  1. Ошибки переполнения:

    • При работе с большими числами (например, вычисления в финансовых приложениях, обработка временных меток) нужно быть внимательным к переполнению.
    • Для значений, превышающих диапазон int, следует использовать long (максимум 9 223 372 036 854 775 807).
  2. Типичные случаи использования:

    • ID элементов: Часто хранятся как int, но при интеграции с внешними системами могут потребоваться long.
    • Временные метки: Время в миллисекундах может превысить максимальное значение int после 24 дней 20 часов 31 минуты 23 секунды.
    • Размеры данных: При работе с файлами размером более 2 ГБ нужно использовать long.
  3. Проверка границ:

    fun safeAdd(a: Int, b: Int): Int {
        return when {
            a > 0 && b > Int.MAX_VALUE - a -> throw ArithmeticException("Переполнение при сложении")
            a < 0 && b < Int.MIN_VALUE - a -> throw ArithmeticException("Потеря значимости при сложении")
            else -> a + b
        }
    }
    

Сравнение с другими типами

ТипРазмерДиапазонИспользование в Android
byte8 бит-128..127Экономное хранение данных
short16 бит-32 768..32 767Реже используется
int32 бита-2 147 483 648..2 147 483 647Основной тип для целых чисел
long64 бита-9 223 372 036 854 775 808..9 223 372 036 854 775 807Большие числа, временные метки

Интересный факт

Значение 2 147 483 647 известно как 31-е число Мерсенна и является простым числом. В компьютерной литературе его иногда называют "два миллиарда" (хотя это немного больше двух миллиардов), и оно часто встречается как ограничение в различных системах и API.

Понимание этих ограничений критически важно для создания стабильных Android-приложений, особенно при работе с большими объемами данных или выполнении математических вычислений.