Побитовые операторы и переполнение
Манипулируйте битами и безопасно используйте операторы переполнения, например &+.
«Побитовые операторы и переполнение» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Арифметические операторы и операторы составного присваивания
- Операторы сравнения и идентичности
- Логические операторы и короткое замыкание
- Побитовые операторы и переполнение