Как используется старший бит в 32-битном целочисленном типе Int32?

«Как используется старший бит в 32-битном целочисленном типе Int32?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В типе Int32 (32-битное целое число со знаком) старший (самый левый) бит является знаковым битом (sign bit). Это следствие использования представления чисел в форме дополнительного кода (two's complement).

Принцип работы:

  • Знаковый бит = 0: Число положительное или ноль. Остальные 31 бит хранят абсолютное значение числа в обычном двоичном виде.
  • Знаковый бит = 1: Число отрицательное. Остальные 31 бит хранят значение, полученное путем инверсии битов абсолютного значения числа и прибавления единицы.

Примеры (в упрощенном 8-битном виде для наглядности, Int8):

let positive: Int8 = 42  // Двоичное: 00101010 (знаковый бит = 0)
let zero: Int8 = 0       // Двоичное: 00000000
let negative: Int8 = -42 // Двоичное: 11010110 
                         // (это 42 (00101010) -> инверсия (11010101) -> +1 (11010110))

Последствия:

  1. Диапазон значений: Из-за резервирования одного бита под знак, диапазон Int32 смещен: от -2,147,483,648 (Int32.min) до 2,147,483,647 (Int32.max).
  2. Сравнение с UInt32: У беззнакового типа UInt32 все 32 бита используются для значения, поэтому его диапазон: от 0 до 4,294,967,295.
  3. Проверка знака: Можно быстро определить знак числа, проверив старший бит с помощью побитовой операции (number & 0x80000000) != 0.

Ключевой вывод: Старший бит в Int32 не «не используется» — он критически важен для представления знака числа и определения его значения в рамках системы дополнительного кода.