ビット演算子とオーバーフロー演算子
ビットを操作し、&+などのオーバーフロー演算子を安全に使用します。
「ビット演算子とオーバーフロー演算子」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
ビット演算子
ビット演算子は、整数を構成する個々の2進数の桁に対して動作します。SwiftにはANDの&、ORの|、XORの^、NOTの~、シフトの<</>>があります。
let a: UInt8 = 0b1100
let b: UInt8 = 0b1010
print(a & b)
print(a | b)ビットAND
&は、入力ビットの両方が1の場合にのみ、結果の各ビットを1にします。ビットをマスクして除外するためによく使われます。
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
^は、2つの入力ビットが異なる場合にのみ、そのビットを1にします。同じ値とのXORを2回行うと、元の値に戻ります。
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)左シフト
<<はビットを左に移動し、空いた部分を0で埋めます。1ビットの左シフトを行うたびに、符号なしの値は2倍になります。
let n: UInt8 = 0b00000011
print(n << 1)
print(n << 2)右シフト
>>はビットを右に移動します。符号なし整数では空いた部分を0で埋めるため、実質的に2の累乗で割ることになります。
let n: UInt8 = 0b00010000
print(n >> 1)
print(n >> 4)通常の演算子でのオーバーフロー
標準的な算術演算は、プログラムの安全性を保つため、オーバーフロー時にトラップします。型の最大値を超えると、通常は黙って折り返すのではなくクラッシュします。
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)AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「ビット演算子とオーバーフロー演算子」レッスンは無料ですか?
はい。「ビット演算子とオーバーフロー演算子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「ビット演算子とオーバーフロー演算子」で何を学びますか?
ビットを操作し、&+などのオーバーフロー演算子を安全に使用します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ビット演算子とオーバーフロー演算子」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 算術演算子と複合代入演算子
- 比較演算子と同一性演算子
- 論理演算子と短絡評価
- ビット演算子とオーバーフロー演算子