0Pricing
Swift Academy · Lekcja

Operatory bitowe i przepełnienia

Manipulowanie bitami i bezpieczne używanie operatorów przepełnienia, takich jak &+.

Operatory bitowe i przepełnienia to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Operatory bitowe

Operatory bitowe działają na pojedynczych bitach liczb całkowitych zapisanych w systemie binarnym. Swift udostępnia operatory AND &, OR |, XOR ^, NOT ~ oraz przesunięcia << i >>.

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

Bitowe AND

Operator & ustawia każdy bit wyniku na 1 tylko wtedy, gdy oba odpowiadające mu bity wejściowe mają wartość 1. Często używa się go do maskowania bitów.

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

Bitowe OR

Operator | ustawia każdy bit wyniku na 1, gdy co najmniej jeden z odpowiadających mu bitów wejściowych ma wartość 1. Jest przydatny do łączenia flag.

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

Bitowe XOR

Operator ^ ustawia bit na 1 tylko wtedy, gdy dwa odpowiadające mu bity wejściowe się różnią. Wykonanie operacji XOR dwa razy z tą samą wartością przywraca wartość początkową.

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

Bitowe NOT

Jednoargumentowy operator ~ odwraca każdy bit. W przypadku UInt8 odwracane jest wszystkich 8 bitów.

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

Przesunięcie w lewo

Operator << przesuwa bity w lewo, uzupełniając wolne miejsca zerami. Każde przesunięcie bez znaku o 1 mnoży wartość przez 2.

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

Przesunięcie w prawo

Operator >> przesuwa bity w prawo. W przypadku liczb całkowitych bez znaku wolne miejsca są uzupełniane zerami, co w praktyce odpowiada dzieleniu przez potęgi liczby dwa.

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

Przepełnienie przy użyciu zwykłych operatorów

Standardowe operacje arytmetyczne zgłaszają błąd w przypadku przepełnienia, aby zapewnić bezpieczeństwo programu: przekroczenie maksymalnej wartości typu zwykle powoduje awarię zamiast cichego zawinięcia wartości.

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

Dodawanie z przepełnieniem &+

Gdy celowo potrzebne jest zawijanie wartości, należy użyć operatorów przepełnienia. Operator &+ po przekroczeniu wartości maksymalnej zawija wynik do wartości minimalnej zamiast powodować awarię.

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

Odejmowanie i mnożenie z przepełnieniem

Operatory &- i &* zawijają wartości w ten sam sposób. Wyrażenie 0 &- 1 dla typu UInt8 daje po zawinięciu 255.

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

Kiedy używać operatorów przepełnienia

Operatorów &+ &- &* należy używać tylko wtedy, gdy zawijanie wartości jest zamierzonym działaniem, na przykład w funkcjach skrótu lub licznikach cyklicznych. W przeciwnym razie ze względów bezpieczeństwa należy preferować operatory zgłaszające błąd przy przepełnieniu.

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

Szybkie sprawdzenie

Proszę przeanalizować zawijanie wartości przy przepełnieniu.

Podsumowanie: operatory bitowe i operatory przepełnienia

Poznano operatory bitowe & | ^ ~ i przesunięcia << >>, zasadę, że zwykłe operacje arytmetyczne zgłaszają błąd przy przepełnieniu dla zapewnienia bezpieczeństwa, oraz fakt, że operatory &+ &- &* celowo zawijają wartości po przekroczeniu granic typu.

let mask: UInt8 = 0b1111
let v: UInt8 = 0b10101010
print("Masked:", v & mask)
print("Wrap:", UInt8(0) &- 1)

Często zadawane pytania

Czy lekcja „Operatory bitowe i przepełnienia” jest bezpłatna?

Tak — pełny tekst „Operatory bitowe i przepełnienia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Operatory bitowe i przepełnienia”?

Manipulowanie bitami i bezpieczne używanie operatorów przepełnienia, takich jak &+. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Operatory bitowe i przepełnienia”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Operatory arytmetyczne i przypisania złożone
  2. Operatory porównania i tożsamości
  3. Operatory logiczne i ewaluacja z krótkim spięciem
  4. Operatory bitowe i przepełnienia
← Powrót do Swift Academy