FixedWidthInteger


すべてのインスタンスに固定サイズを使用する整数型。


iOS 8.0+ iPadOS 8.0+ Mac Catalyst 13.0+ macOS 10.10+

tvOS 9.0+ visionOS 1.0+ watchOS 2.0+

protocol FixedWidthInteger : BinaryInteger, LosslessStringConvertible where Self.Magnitude : FixedWidthInteger, Self.Magnitude : UnsignedInteger, Self.Stride : FixedWidthInteger, Self.Stride : SignedInteger






概観


FixedWidthInteger プロトコルは、BinaryInteger プロトコルでサポートされている演算に加えて、ビット単位の二進演算、ビットシフト、オーバーフロー処理を追加します。


ビットシフト、ビット単位演算の実行、オーバーフローの捕捉、または型の表現可能な最大値または最小値へのアクセスに依存する演算を記述する際は、FixedWidthInteger プロトコルを制約または拡張ポイントとして使用します。例えば、以下のコードは、すべての固定幅整数に対して、数値の二進表現を 8 ビットの塊に分割した binaryString プロパティを提供します。


  1. extension FixedWidthInteger {
  2. var binaryString: String {
  3. var result: [String] = []
  4. for i in 0..<(Self.bitWidth / 8) {
  5. let byte = UInt8(truncatingIfNeeded: self >> (i * 8))
  6. let byteString = String(byte, radix: 2)
  7. let padding = String(repeating: "0",
  8. count: 8 - byteString.count)
  9. result.append(padding + byteString)
  10. }
  11. return "0b" + result.reversed().joined(separator: "_")
  12. }
  13. }
  14. print(Int16.max.binaryString)
  15. // Prints "0b01111111_11111111"
  16. print((101 as UInt8).binaryString)
  17. // Prints "0b01100101"

BinaryString の実装では、静的な bitWidth プロパティと右シフト演算子 (>>) を使用し、これらはどちらも、FixedWidthInteger プロトコルに準拠する任意の型で使用できます。


次の例では、任意の固定幅整数型のインスタンス x を受け入れる汎用の squared 関数を宣言しています。この関数は、multipliedReportingOverflow(by:) メソッドを使用して x を自身で乗算し、結果が同じ型で表現するには大きすぎるかどうかを確認します。


  1. func squared<T: FixedWidthInteger>(_ x: T) -> T? {
  2. let (result, overflow) = x.multipliedReportingOverflow(by: x)
  3. if overflow {
  4. return nil
  5. }
  6. return result
  7. }
  8. let (x, y): (Int8, Int8) = (9, 123)
  9. print(squared(x))
  10. // Prints "Optional(81)"
  11. print(squared(y))
  12. // Prints "nil"

FixedWidthInteger プロトコルへの準拠


独自のカスタム型を FixedWidthInteger プロトコルに準拠させるには、必要なイニシャライザ、プロパティ、およびメソッドを宣言します。ReportingOverflow という接尾辞が付いた必須メソッドは、算術演算のカスタマイズポイントとして機能します。これらのメソッドのみを実装すれば、標準ライブラリは他のすべての算術メソッドと演算子のデフォルトの実装を提供します。





トピックス


演算子


static func &* (Self, Self) -> Self

与えられた 2 つの値の積を返します。オーバーフローが発生した場合は結果を包み込みます。

必須 デフォルトの実装が提供されます。


static func &*= (inout Self, Self)

2 つの値を乗算し、結果を左辺の変数に格納し、オーバーフローがあればそれを包み込みます。


static func &+ (Self, Self) -> Self

与えられた 2 つの値の合計を返し、オーバーフローが発生した場合は結果を包み込みます。


static func &+= (inout Self, Self)

2 つの値を加算し、オーバーフロー部分を包み込んで結果を左辺の変数に格納します。


static func &- (Self, Self) -> Self

与えられた 2 つの値の差を返します。オーバーフローが発生した場合は結果を包み込みます。


static func &-= (inout Self, Self)

2 番目の値を 1 番目の値から減算し、その差を左辺の変数に格納し、オーバーフローがあればそれを包み込みます。


static func &>> (Self, Self) -> Self

値の二進表現を指定された桁数だけ右にシフトした結果を返し、シフト量は型のビット幅にマスクされます。

必須 デフォルトの実装が提供されます。


static func &<< (Self, Self) -> Self

値の二進表現を指定された桁数だけ左にシフトした結果を返し、シフト量は型のビット幅にマスクされます。

必須 デフォルトの実装が提供されます。


static func &>>= (inout Self, Self)

値の二進表現を指定された桁数だけ右にシフトした結果を計算し、シフト量を型のビット幅にマスクして、結果を左辺の変数に格納します。

必須 デフォルトの実装が提供されます。


static func &<<= (inout Self, Self)

値の二進表現を指定された桁数だけ左にシフトし、シフト量を型のビット幅にマスクした結果を返し、結果を左辺の変数に格納します。

必須 デフォルトの実装が提供されます。



イニシャライザ


init?<S>(S, radix: Int)

与えられた文字列と基数から新しい整数値を作成します。


init(bigEndian: Self)

必要に応じてバイトの順序を変更し、ビッグエンディアン表現から整数を作成します。

必須 デフォルトの実装が提供されます。


init(littleEndian: Self)

必要に応じてバイトの順序を変更し、リトルエンディアン表現から整数を作成します。

必須 デフォルトの実装が提供されます。



インスタンスプロパティ


var bigEndian: Self

この整数のビッグエンディアン表現。

必須 デフォルトの実装が提供されます。


var byteSwapped: Self

バイトの順序を入れ替えたこの整数の表現。

必須


var leadingZeroBitCount: Int

この値の二進表現における先頭のゼロの数。

必須


var littleEndian: Self

この整数のリトルエンディアン表現。

必須 デフォルトの実装が提供されます。


var nonzeroBitCount: Int

この値の二進表現で 1 に等しいビットの数。

必須



インスタンスメソッド


func addingReportingOverflow(Self) -> (partialValue: Self, overflow: Bool)

この値と与えられた値の合計と、演算中にオーバーフローが発生したかどうかを示すブール値を返します。

必須


func dividedReportingOverflow(by: Self) -> (partialValue: Self, overflow: Bool)

この値を与えられた値で除算した商と、演算中にオーバーフローが発生したかどうかを示すブール値を返します。

必須


func dividingFullWidth((high: Self, low: Self.Magnitude)) -> (quotient: Self, remainder: Self)

与えられた値をこの値で除算したときの商と余りを含むタプルを返します。

必須


func multipliedFullWidth(by: Self) -> (high: Self, low: Self.Magnitude)

この値と与えられた値を乗算した結果の上位部分と下位部分を含むタプルを返します。

必須 デフォルトの実装が提供されます。


func multipliedReportingOverflow(by: Self) -> (partialValue: Self, overflow: Bool)

この値と与えられた値の積と、演算中にオーバーフローが発生したかどうかを示すブール値を返します。

必須


func remainderReportingOverflow(dividingBy: Self) -> (partialValue: Self, overflow: Bool)

この値を与えられた値で除算した後の余りと、除算中にオーバーフローが発生したかどうかを示すブール値を返します。

必須


func subtractingReportingOverflow(Self) -> (partialValue: Self, overflow: Bool)

この値から与えられた値を減算して得られた差と、演算中にオーバーフローが発生したかどうかを示すブール値を返します。

必須



型プロパティ


static var bitWidth: Int

この型の値の基になる二進表現に使用されるビット数。


必須 デフォルトの実装が提供されます。


static var max: Self

この型で表現可能な最大の整数。

必須


static var min: Self

この型で表現できる最小の整数。

必須



型メソッド


static func random(in: Range<Self>) -> Self

指定された範囲内のランダムな値を返します。


static func random(in: ClosedRange<Self>) -> Self

指定された範囲内のランダムな値を返します。


static func random<T>(in: Range<Self>, using: inout T) -> Self

与えられたジェネレータを乱数のソースとして使用し、指定された範囲内のランダムな値を返します。


static func random<T>(in: ClosedRange<Self>, using: inout T) -> Self

与えられたジェネレータを乱数のソースとして使用し、指定された範囲内のランダムな値を返します。





関連


以下からの継承


AdditiveArithmetic

BinaryInteger

Comparable

CustomStringConvertible

Equatable

ExpressibleByIntegerLiteral

Hashable

LosslessStringConvertible

Numeric

Strideable



準拠型


Int

Int128

Int16

Int32

Int64

Int8

UInt

UInt128

UInt16

UInt32

UInt64

UInt8





以下も見よ


整数


protocol BinaryInteger

2進法表現での整数型。


protocol SignedInteger

正の値と負の値の両方を表すことができる整数型。


protocol UnsignedInteger

負でない値のみを表すことができる整数型。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ