Swift Academy · レッスン

ビット演算子とオーバーフロー演算子

ビットを操作し、&+などのオーバーフロー演算子を安全に使用します。

レッスン 4/413 ステップ

「ビット演算子とオーバーフロー演算子」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 算術演算子と複合代入演算子
  2. 比較演算子と同一性演算子
  3. 論理演算子と短絡評価
  4. ビット演算子とオーバーフロー演算子
← Swift Academyに戻る