Ответ
В типе 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))
Последствия:
- Диапазон значений: Из-за резервирования одного бита под знак, диапазон
Int32смещен: от -2,147,483,648 (Int32.min) до 2,147,483,647 (Int32.max). - Сравнение с UInt32: У беззнакового типа
UInt32все 32 бита используются для значения, поэтому его диапазон: от 0 до 4,294,967,295. - Проверка знака: Можно быстро определить знак числа, проверив старший бит с помощью побитовой операции
(number & 0x80000000) != 0.
Ключевой вывод: Старший бит в Int32 не «не используется» — он критически важен для представления знака числа и определения его значения в рамках системы дополнительного кода.