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
- Operatory arytmetyczne i przypisania złożone
- Operatory porównania i tożsamości
- Operatory logiczne i ewaluacja z krótkim spięciem
- Operatory bitowe i przepełnienia