Swift Academy · Урок

Побитовые операторы и переполнение

Манипулируйте битами и безопасно используйте операторы переполнения, например &+.

Урок 4 из 413 шагов

«Побитовые операторы и переполнение» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Побитовые операторы

Побитовые операторы работают с отдельными двоичными разрядами целых чисел. Swift предоставляет AND &, OR |, XOR ^, NOT ~ и сдвиги << и >>.

let a: UInt8 = 0b1100
let b: UInt8 = 0b1010
print(a & b)
print(a | b)

Побитовый AND

& устанавливает каждый бит результата в 1 только тогда, когда оба входных бита равны 1. Этот оператор часто используют, чтобы отфильтровать биты с помощью mask.

let value: UInt8 = 0b10110101
let mask: UInt8 = 0b00001111
let low = value & mask
print(low)

Побитовый OR

| устанавливает каждый бит результата в 1, если хотя бы один входной бит равен 1. Это удобно для объединения флагов.

let flagsA: UInt8 = 0b0001
let flagsB: UInt8 = 0b0100
let combined = flagsA | flagsB
print(combined)

Побитовый XOR

^ устанавливает бит в 1 только тогда, когда два входных бита различаются. Применение XOR к одному и тому же значению дважды восстанавливает исходное (original) значение.

let original: UInt8 = 0b1010
let key: UInt8 = 0b0110
let encoded = original ^ key
let decoded = encoded ^ key
print(encoded, decoded)

Побитовый NOT

Унарный оператор ~ инвертирует каждый бит. Для значения типа UInt8 меняются все 8 битов.

let bits: UInt8 = 0b00001111
let inverted = ~bits
print(inverted)

Сдвиг влево

<< перемещает биты влево, заполняя освободившиеся позиции нулями. Каждый сдвиг беззнакового значения влево на 1 умножает его на 2.

let n: UInt8 = 0b00000011
print(n << 1)
print(n << 2)

Сдвиг вправо

>> перемещает биты вправо. Для беззнаковых целых чисел освободившиеся позиции заполняются нулями, что фактически равносильно делению на степени двойки.

let n: UInt8 = 0b00010000
print(n >> 1)
print(n >> 4)

Переполнение обычных операторов

Стандартная арифметика вызывает аварийное завершение при переполнении, чтобы программа оставалась безопасной (safe): превышение максимального значения типа обычно приводит к сбою, а не к незаметному циклическому переходу.

let maxByte = UInt8.max
print("Max UInt8:", maxByte)
let safe = Int(maxByte) + 1
print("Promoted sum:", safe)

Сложение с переполнением &+

Если Вы намеренно хотите получить циклический переход, используйте операторы с переполнением. &+ при переходе за максимум возвращается к минимуму вместо аварийного завершения.

let maxByte: UInt8 = 255
let wrapped = maxByte &+ 1
print(wrapped)

Вычитание и умножение с переполнением

&- и &* работают с циклическим переходом таким же образом. Для UInt8 выражение 0 &- 1 даёт 255 после перехода.

let zero: UInt8 = 0
print(zero &- 1)
let big: UInt8 = 200
print(big &* 2)

Когда использовать операторы с переполнением

Используйте &+ &- &* только тогда, когда циклический переход является ожидаемым поведением, например при хешировании или работе циклических счётчиков. В остальных случаях для безопасности выбирайте операторы, вызывающие аварийное завершение.

var counter: UInt8 = 254
for _ in 0..<4 {
    counter = counter &+ 1
    print(counter)
}

Быстрая проверка

Рассуждайте о циклическом переходе при переполнении.

Итоги: побитовые операторы и операторы с переполнением

Вы изучили побитовые операторы & | ^ ~ и сдвиги << >>, узнали, что обычная арифметика при переполнении вызывает аварийное завершение для безопасности, а &+ &- &* намеренно выполняют циклический переход через границы типа.

let mask: UInt8 = 0b1111
let v: UInt8 = 0b10101010
print("Masked:", v & mask)
print("Wrap:", UInt8(0) &- 1)
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Побитовые операторы и переполнение» бесплатный?

Да — полный текст урока «Побитовые операторы и переполнение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Побитовые операторы и переполнение»?

Манипулируйте битами и безопасно используйте операторы переполнения, например &+. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Побитовые операторы и переполнение»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Арифметические операторы и операторы составного присваивания
  2. Операторы сравнения и идентичности
  3. Логические операторы и короткое замыкание
  4. Побитовые операторы и переполнение
← Назад к Swift Academy