Instance Method インスタンスメソッド

multipliedFullWidth(by:)

Returns a tuple containing the high and low parts of the result of multiplying this value by the given value. この値を指定の値で掛ける結果の高および低部分を含んでいるタプルを返します。

Declaration 宣言

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

Parameters パラメータ

other

The value to multiply this value by. この値に掛ける値。

Return Value 戻り値

A tuple containing the high and low parts of the result of multiplying this value and other. この値とotherを乗算する結果の高および低部分を含んでいるタプル。

Discussion 解説

Use this method to calculate the full result of a product that would otherwise overflow. Unlike traditional truncating multiplication, the multipliedFullWidth(by:) method returns a tuple containing both the high and low parts of the product of this value and other. The following example uses this method to multiply two UInt8 values that normally overflow when multiplied: このメソッドを使うことで、そうしなければオーバーフローするであろう積の完全な結果を計算してください。従来的な切り詰め乗算と違って、multipliedFullWidth(by:)メソッドは、この値とotherの積のhighおよびlow部分の両方を含んでいるタプルを返します。以下の例は、このメソッドを使って、通常は乗算した時オーバーフローする2つのUInt8値を乗算します:


let x: UInt8 = 100
let y: UInt8 = 20
let result = x.multipliedFullWidth(by: y)
// result.high == 0b00000111
// result.low  == 0b11010000

The product of x and y is 2000, which is too large to represent in a UInt8 instance. The high and low properties of the result value represent 2000 when concatenated to form a double-width integer; that is, using result.high as the high byte and result.low as the low byte of a UInt16 instance. xyの積は2000です、それはUInt8インスタンスにおいて表すには大きすぎます。result値のhighおよびlowプロパティは、二倍幅整数に成形するために連結される時2000を表します;すなわち、UInt16インスタンスの高バイトとしてresult.highをそして低バイトとしてresult.lowを使って。


let z = UInt16(result.high) << 8 | UInt16(result.low)
// z == 2000

Relationships 関係

From Protocol 由来プロトコル