Swift 標準ライブラリ >     BitwiseOperations
プロトコル
BitwiseOperations
標準的なビット単位の算術演算子をサポートする型。
概観
BitwiseOperations プロトコルに準拠する型は、ビット単位の演算のための演算子を実装します。標準ライブラリの整数型は、すべてデフォルトで BitwiseOperations に準拠しています。整数でビット単位の演算子を使用する場合は、整数の値を格納する生のデータビットに対して演算を実行します。
以下の例では、任意の値のバイナリ表現が右のコメントにこのように表示されています。
let x: UInt8 = 5 // 0b00000101
BitwiseOperations プロトコルに必要な演算子は以下のとおりです。
- ビット単位の OR 演算子(|) は、引数の 1 つまたは両方 のビットが 1 に設定されている場合、各ビットが 1 に設定された値を返します。これは 2 つのセットの和集合に相当します。例えば:
- ビット単位の AND 演算子(&) は、引数の 両方の ビットが 1 に設定されている場合、各ビットが 1 に設定された値を返します。これは 2 つのセットの交差に相当します。 例えば:
- ビット単位の XOR 演算子(^) または排他的論理和演算子は、その演算子の 一方または他方、しかし両方でなく、そのビットが 1 に設定された各ビットが 1 に設定された値を返します。これは、2つのセットの対称差セットに等しいです。例えば:
- ビット単位の NOT 演算子(~) は、その引数のすべてのビットを反転した値を返す接頭辞演算子です。引数の 1 のビットは結果では 0 で、引数の 0 のビットは結果では 1 です。これはセットの逆数と等価です。例えば:
let x: UInt8 = 5 // 0b00000101 let y: UInt8 = 14 // 0b00001110 let z = x | y // 0b00001111
値と、allZeros とのビット単位の OR 演算を実行すると、常に同じ値を返します。
print(x | .allZeros) // 0b00000101 // Prints "5"
let x: UInt8 = 5 // 0b00000101 let y: UInt8 = 14 // 0b00001110 let z = x & y // 0b00000100
値と allZeros のビット単位の AND 演算を実行すると、常に allZeros を返します。
print(x & .allZeros) // 0b00000000 // Prints "0"
let x: UInt8 = 5 // 0b00000101 let y: UInt8 = 14 // 0b00001110 let z = x ^ y // 0b00001011
値と allZeros のビット単位の XOR 演算を実行すると、常に同じ値を返します。
print(x ^ .allZeros) // 0b00000101 // Prints "5"
let x: UInt8 = 5 // 0b00000101 let notX = ~x // 0b11111010
allZeros でビット単位の NOT 演算を実行すると、すべてのビットが 1 に設定された値が返されます。
let allOnes = ~UInt8.allZeros // 0b11111111
OptionSet プロトコルは、BitwiseOperation に準拠した生の値を使用して、union(_:), intersection(_:)、および contains(_:) で O(1)のパフォーマンスを持つような数学的セット演算を提供します。
BitwiseOperations プロトコルへの準拠
カスタム型を BitwiseOperations に準拠させるには、static allZeros プロパティを追加し、4 つの必要な演算子関数を宣言します。BitwiseOperations に準拠するすべての型、ここで x は準拠型のインスタンスだが、これは以下の条件を満たす必要があります。
- x | Self.allZeros == x
- x ^ Self.allZeros == x
- x & Self.allZeros == .allZeros
- x & ~Self.allZeros == x
- ~x == x ^ ~Self.allZeros
プロトコル要件
型プロパティー
static var allZeros: Self
空のビットセット。
演算子関数
static func &(Self, Self)
2つの引数に設定されたビットの交差を返します。
static func ^(Self, Self)
2つの引数のうちの1つに設定されたビットをそのまま返します。
static func |(Self, Self)
2つの引数に設定されたビットの和集合を返します。
static func ~(Self)
引数に設定されたビットの逆数を返します。
関連
以下も見よ
関連したシンボル