Обмен технологиями

Принцип расчета диапазона, представленного переменными типа int

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Понять

Вставьте сюда описание изображения
Обычно переменная типа int занимает 4 байта, 1 байт имеет 8 бит, и каждый бит имеет два состояния: 0 и 1, поэтому переменная типа int может представлять в общей сложности 2^32 состояния (то есть она может представлять 2^8). значение данных).

2. Почему обычно диапазон значений целочисленного типа int составляет -2147483648 ~ 2147483647

Начало в 07:36
дальнейшее понимание
        просить: Из двух приведенных выше видеороликов мы можем узнать, что диапазон целых положительных чисел, которые могут быть представлены типом int, составляет 1 ~ 2^31 - 1. Если мы сравним эту логику с отрицательными целыми числами, то диапазон целых чисел, которые могут быть представлены, равен 1 ~ 2^31 - 1. по типу int не должно быть -2^31 + 1 ~ 2^31 -1? Поскольку значение 2^31 получить невозможно, почему можно получить -2^31?
        отвечать:В информатике наиболее часто используемое представление целого числа со знаком:представление дополнения до двух . Этот метод не только решает проблему представления положительных и отрицательных чисел, но и упрощает двоичные операции сложения и вычитания. Давайте рассмотрим это представление подробно:
        1. Положительное число : Двоичное представление положительных чисел такое же, как и беззнаковых чисел. Например, трехзначное двоичное представление числа 3 — 011.
        2. отрицательное число : представление отрицательных чисел достигается за счет дополнения положительных чисел. Дополнение до двух отрицательного числа рассчитывается путем инвертирования двоичного представления абсолютного значения числа и добавления 1. Например:
① Отрицание: сначала инвертируйте двоичное представление числа 3, 011 в число 100.
② Прибавление 1: прибавьте 1 к 100, чтобы получить 101, поэтому представление дополнения до двух для -3 равно 101.
         Для 32-битной целочисленной переменной ее старший бит (также называемый битом знака) представляет знак, 0 соответствует положительному значению, а 1 представляет отрицательное значение. Оставшийся 31 бит используется для представления числовых значений.Далее вернемся к только что поднятому вопросу:
        1. Положительный диапазон (включая 0) : Знаковый бит равен 0, а остальные 31 бит могут представлять значения от 000…000 (31 0 с) до 011… 111 (31 1 с). Соответствующий десятичный диапазон — от 0 до 2^31 – 1.
        2. Отрицательный диапазон : Знаковый бит равен 1, а остальные 31 бит могут представлять значения от 100...000 (31 0 с) до 111...111 (31 1 с). Среди них дополнение до двух чисел 100...000 (31 ноль) представляет -2^31, а соответствующее десятичное значение - -2^31. Дополнение до двух чисел 111...111 (31 единица) представляет -1, а соответствующее десятичное значение равно -1.
         Диапазон положительных чисел: 1 ~ 2^31 - 1; Диапазон отрицательных чисел: -1 ~ -2^31, общее количество по-прежнему составляет 2^32 различных состояний. Поэтому обычно диапазон значений целочисленного типа int составляет -2147483648 ~ 2147483647 (т.е. -2^31 ~ 2^31 - 1).

3. Сколько байт занимает тип int?

Сколько байт занимает 64-битное целое число? Разница между целочисленными типами int, long и long long?
Сколько байт занимает 64-битный int? [Интервью] Сколько байт занимает int?
Разница между 32-битными и 64-битными машинами и количеством байтов, занимаемых базовыми типами данных
Целочисленный тип языка C (включая диапазон значений и длину)
Сколько байт занимает тип int?
Размер данных типа int и типа указателя на разных платформах
Проблема Java sizeof()
Переменные типа Int в Python могут хранить целые числа любого размера.

Подведем итог:

  1. На размер типа данных C и C++ влияют стандарт компиляции, компилятор, разрядность операционной системы и т. д.
  2. Размер типа данных Java и Python определяется спецификацией языка или реализацией интерпретатора и не зависит от таких факторов, как разрядность компилятора и операционной системы.
  3. Основная причина такого различия в конструкции заключается в том, что C и C++ — это языки системного программирования, которым обычно необходимо напрямую взаимодействовать с оборудованием, поэтому размер типов данных будет варьироваться в зависимости от базовой среды, в то время как Java и Python являются высокопроизводительными; уровневые языки программирования с более высоким уровнем абстракции. Целью проектирования является кроссплатформенная согласованность.

4. Рекомендовать

Рекомендуется снова
Часть третья: Происхождение проблемы