プロトコル


BinaryInteger


2進法表現での整数型。


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

tvOS 9.0+ visionOS 1.0+ watchOS 2.0+

protocol BinaryInteger : CustomStringConvertible, Hashable, Numeric (Numeric), Strideable where Self.Magnitude : BinaryInteger, Self.Magnitude == Self.Magnitude.Magnitude





概観


BinaryInteger プロトコルは、標準ライブラリが提供するすべての整数型の基礎です。IntUInt32 など、標準ライブラリのすべての整数型は BinaryInteger に準拠しています。



数値型間の変換


BinaryInteger プロトコルに準拠する型の新しいインスタンスは、浮動小数点数または任意の型の別の 2 進整数から作成できます。BinaryInteger プロトコルは、4 種類の異なる変換のためのイニシャライザを提供します。



範囲チェック変換


渡された値が新しい型で表現可能であることが確実な場合は、デフォルトの init(_:) イニシャライザを使用して新しいインスタンスを作成します。例えば、Int16 のインスタンスは値 500 を表現できるため、以下のコードサンプルの最初の変換は成功します。同じ値は Int8 インスタンスでは表現できないほど大きいため、2 回目の変換は失敗し、実行時エラーが発生します。


  1. let x: Int = 500
  2. let y = Int16(x)
  3. // y == 500
  4. let z = Int8(x)
  5. // Error: Not enough bits to represent...

デフォルトのイニシャライザを使用して浮動小数点値から 2 進整数を作成すると、範囲チェックの前に値はゼロに向かって丸められます。以下の例では、値 127.75127 に丸められ、Int8 型で表現できます。一方、128.25128 に丸められますが、これは Int8 インスタンスとして表現できないため、実行時エラーが発生します。


  1. let e = Int8(127.75)
  2. // e == 127
  3. let f = Int8(128.25)
  4. // Error: Double value cannot be converted...


正確な変換


init?(exactly:) イニシャライザを使用すると、渡された値が表現可能かどうかを確認した後、新しいインスタンスを作成できます。範囲外の値をトラップする代わりに、失敗可能な init?(exactly:) イニシャライザを使用すると、nil が返されます。


  1. let x = Int16(exactly: 500)
  2. // x == Optional(500)
  3. let y = Int8(exactly: 500)
  4. // y == nil

浮動小数点値を変換する場合、init?(exactly:) イニシャライザは、渡された値に小数部分がないことと、値が結果の型で表現可能であることの両方をチェックします。


  1. let e = Int8(exactly: 23.0) // integral value, representable
  2. // e == Optional(23)
  3. let f = Int8(exactly: 23.75) // fractional value, representable
  4. // f == nil
  5. let g = Int8(exactly: 500.0) // integral value, nonrepresentable
  6. // g == nil


固定変換


init(clamping:) イニシャライザを使用して、範囲外の値が型の表現可能な範囲に固定される 2 進の整数型の新しいインスタンスを作成します。型 T の場合、結果の値は T.min...T.max の範囲内になります。


  1. let x = Int16(clamping: 500)
  2. // x == 500
  3. let y = Int8(clamping: 500)
  4. // y == 127
  5. let z = UInt8(clamping: -500)
  6. // z == 0


ビットパターン変換


init(truncatingIfNeeded:) イニシャライザを使用して、渡された値と同じビットパターンを持つ新しいインスタンスを作成し、必要に応じて値の表現を拡張または切り捨てます。特に、符号付き整数型と符号なし整数型間の変換時や、変換先の型のビット幅が変換元の型よりも小さい場合は、値が保持されない可能性があることに注意してください。以下の例は、負でない整数に対する拡張と切り捨ての動作を示しています。


  1. let q: Int16 = 850
  2. // q == 0b00000011_01010010
  3. let r = Int8(truncatingIfNeeded: q)   // truncate 'q' to fit in 8 bits
  4. // r == 82
  5. //    == 0b01010010
  6. let s = Int16(truncatingIfNeeded: r)   // extend 'r' to fill 16 bits
  7. // s == 82
  8. //    == 0b00000000_01010010

詰め物は、渡された値の 符号拡張 によって行われます。負でない整数を拡張する場合、結果はゼロで詰め物されます。負の整数を拡張する場合、結果は 1 で詰め物されます。以下の例は、負の値の拡張変換をいくつか示しています。負の値は、符号なし型に変換する場合でも符号拡張されることに注意してください。


  1. let t: Int8 = -100
  2. // t == -100
  3. // t's binary representation == 0b10011100
  4. let u = UInt8(truncatingIfNeeded: t)
  5. // u == 156
  6. // u's binary representation == 0b10011100
  7. let v = Int16(truncatingIfNeeded: t)
  8. // v == -100
  9. // v's binary representation == 0b11111111_10011100
  10. let w = UInt16(truncatingIfNeeded: t)
  11. // w == 65436
  12. // w's binary representation == 0b11111111_10011100


整数型間の比較


異なる 2 進整数型のインスタンスを比較するには、小なり演算子(<)や等号演算子(==)などの関係演算子を使用できます。以下の例では、Int、UInt、UInt8 型のインスタンスを比較しています。


  1. let x: Int = -23
  2. let y: UInt = 1_000
  3. let z: UInt8 = 23
  4. if x < y {
  5. print("\(x) is less than \(y).")
  6. }
  7. // Prints "-23 is less than 1000."
  8. if z > x {
  9. print("\(z) is greater than \(x).")
  10. }
  11. // Prints "23 is greater than -23."




トピックス


2 進の整数の作成


init()

ゼロに等しい新しい値を作成します。



整数の変換


init<T>(T)

与えられた整数から新しいインスタンスを作成します。

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


init<T>(clamping: T)

与えられた整数に最も近い表現可能な値を持つ新しいインスタンスを作成します。

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


init<T>(truncatingIfNeeded: T)

この型に適合するように符号拡張または切り捨てを行って、与えられたインスタンスのビットパターンから新しいインスタンスを作成します。

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



浮動小数点値の変換


init<T>(T)

与えられた浮動小数点値から、ゼロに向かって丸められた整数を作成します。

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



精度を落とさずに変換


init?<T>(exactly: T)

与えられた浮動小数点値を正確に表現できる場合は、その値から整数を作成します。

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



計算の実行


二進の整数の演算子

算術演算やビット演算を実行したり、値を比較したりします。


func quotientAndRemainder(dividingBy: Self) -> (quotient: Self, remainder: Self)

この値を与えられた値で除算した商と余りを返します。

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


func isMultiple(of: Self) -> Bool

この値が与えられた値の倍数である場合は true を返し、そうでない場合は false を返します。

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



符号と大きさを見つける


func signum() -> Self

この値が負の場合は -1 を、正の場合は 1 を返します。それ以外の場合は 0 を返します。

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



数値定数へのアクセス


static var isSigned: Bool

この型が符号付き整数型であるかどうかを示すブール値。

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



二進表現の操作


var bitWidth: Int

この値の現在の二進表現のビット数。

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


var trailingZeroBitCount: Int

この値の二進表現における末尾のゼロの数。

必須

var words: Self.Words

この値の二進表現の word を、最下位から最上位の順に並べたコレクション。

必須

associatedtype Words : RandomAccessCollection

2 進整数の word を表す型。

必須

演算子


static func % (Self, Self) -> Self

最初の値を 2 番目の値で除算した余りを返します。

必須

static func ^ (Self, Self) -> Self

与えられた 2 つの値に対してビット単位の XOR 演算を実行した結果を返します。

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


static func | (Self, Self) -> Self

与えられた 2 つの値に対してビット単位の OR 演算を実行した結果を返します。

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


static func ^= (inout Self, Self)

与えられた 2 つの値に対してビット単位の XOR 演算を実行した結果を左辺の変数に格納します。

必須


static func |= (inout Self, Self)

与えられた 2 つの値に対してビット単位の OR 演算を実行した結果を左辺の変数に格納します。

必須


static func %= (inout Self, Self)

最初の値を 2 番目の値で除算し、その余りを左辺の変数に格納します。

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


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

値の二進表現を指定された桁数だけ左にシフトした結果を返します。

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




@@@@@@@@@@@@@@
01/15ここまで
@@@@@@@@@@@@@@


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

値の二進表現を指定された桁数だけ右にシフトした結果を返します。

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


static func >>= <RHS>(inout Self, RHS)

値の二進表現を指定された桁数だけ右にシフトした結果を左辺の変数に格納します。

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


static func <<= <RHS>(inout Self, RHS)

値の二進表現を指定された桁数だけ左にシフトした結果を左辺の変数に格納します。

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















トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ