Golang の人気により、ますます多くの開発者が Golang プログラミング言語を学習し、使用し始めています。数値型の変換は、Golang でよくある問題です。この記事では、Golang で数値型を変換する方法について説明します。
パート 1: Golang の数値型
Golang には、次のようなさまざまな型の数値型があります:
int と uint 以外のすべて型には指定されたビット数があります。たとえば、int8 は 8 ビット整数を表し、int16 は 16 ビット整数を表します。これらの型はスコープが異なるため、変換を行う際には正しいスコープを維持するように注意する必要があります。そうしないと、オーバーフローや未定義の動作が発生する可能性があります。
パート 2: 数値型の変換
Golang では、型変換演算子を使用して数値型の変換を実行できます。型変換演算子は T(x) として表されます。ここで、T は変換先の型、x は変換先の値です。たとえば、float64 型の変数を int 型の変数に変換するには、次のコードを使用できます。
f := 3.14159 i := int(f)
Golang の数値型変換は 2 つのタイプに分類できます。
損失変換とは、より大きな数値型をより小さな数値型に変換することを指します。この変換により、精度の低下、切り捨て、オーバーフローが発生する可能性があります。たとえば、int 型の変数を int8 型の変数に変換する場合、元の値が int8 の範囲を超えるとオーバーフローが発生します。
以下は例です:
i := 1000 i8 := int8(i) // 结果为-24
この例では、int 型の変数 i が int8 型の変数 i8 に変換されます。 int8 の範囲は -128 ~ 127 しかないため、i の値が int8 の範囲を超えてオーバーフローが発生します。したがって、i8 の値は元の 1000 ではなく -24 になります。
ロスレス変換とは、より小さい数値型をより大きな数値型に変換することを指します。この変換により、精度の低下や切り捨てが発生することはありません。たとえば、uint8 型の変数を uint16 型の変数に変換する場合、精度の低下や切り捨ては発生しません。
以下は例です。
u8 := uint8(255) u16 := uint16(u8) // 结果为255
この例では、uint8 型変数 u8 が uint16 型変数 u16 に変換されます。 uint16 は uint8 よりも範囲が広いため、変換はロスレスであり、精度も失われません。
その3: 数値型変換の注意点
Golangにおける数値型変換は非常に簡単ですが、変換する際に注意しなければならない点がいくつかあります。
オーバーフローは、より大きな数値型をより小さな数値型に変換することによって発生する可能性があります。たとえば、int 型の変数を int8 型の変数に変換する場合、元の値が int8 の範囲を超えるとオーバーフローが発生します。
より大きな浮動小数点数をより小さな浮動小数点数に変換すると、精度が失われる可能性があります。たとえば、float64 型の変数を float32 型の変数に変換すると、精度が失われる可能性があります。
2 つの数値型の桁数は同じですが、Golang では明示的な変換が必要です。たとえば、int 型の変数を int32 型の変数に変換する場合は、明示的な変換演算子を使用する必要があります。
異なる数値型は直接比較できないため、2 つの数値変数を比較する前に、それらを同じ型に変換する必要があります。
結論
Golang では、数値型の変換は一般的な操作です。型変換演算子を使用して、異なる数値型の間で変換できます。数値型変換を実行するときは、非可逆変換により精度の低下、切り捨て、オーバーフローが発生する可能性があることに注意してください。さらに、異なる型の数値変数は直接比較できないため、同じ型に変換する必要があります。
以上がgolangの数値型変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。