PowerShell: Int16・Int32・Int64型の違いと最小値・最大値
PowerShellでは整数値を格納するデータ型として Int16・Int32・Int64型があります。 これらのデータ型の違いと最小値・最大値を説明します。
各データ型のサイズはInt16型が2バイト、Int32型が4バイト、 Int64型が8バイトとなっています。 ですから格納できるデータの最小値・最大値は次のようになります。
データ型 | サイズ | 最小値・最大値 |
---|---|---|
Int16 | 2バイト | -32768 ~ 32767 |
Int32 | 4バイト | -2,147,483,648 ~ 2,147,483,647 |
Int64 | 8バイト | -9,223,372,036,854,775,808 ~
9,223,372,036,854,775,807 |
最も使用頻度が高いのはInt32型で、 例えば「$n = 100」とデータ型を明示せずに記述した場合、 自動的にInt32型になります。 Int32型の最大値は「2,147,483,647」なので 特別に大きな数値を使用しない限りはInt32型を利用すれば十分です。
$n = 100 Write-Host $n.GetType() # 実行結果 System.Int32
データ型の最大値を超える数値を指定した場合
最初にInt32型で収まる数値(例:100)を指定して、 次にInt32型の最大値を超える数値を指定した場合は どうなるでしょうか?
$n = 100 Write-Host $n.GetType() # System.Int32 $n = 10000000000 Write-Host $n.GetType() # System.Int64
上の実行結果からわかるように、 自動的にInt64型になっています。 ただしこれはデータ型を明示せずにPowerShellが自動的に 判別している場合です。
明示的にデータ型を指定して、 そのデータ型の最大値を超える数値を指定した場合は 次のようにエラーが発生します。
[Int32]$n = 100 Write-Host $n.GetType() $n = 10000000000 Write-Host $n.GetType() # 実行結果(エラーメッセージ) 値 "10000000000" を型 "System.Int32" に変換できません。 エラー: "Int32 型の値が大きすぎ るか、または小さすぎます。"
この場合は、別のInt64型の変数を用意して代入するか、 $nをInt64型に変更する必要があります。
[Int32]$n = 100 Write-Host $n.GetType() # System.Int32 [Int64]$n = 10000000000 Write-Host $n.GetType() # System.Int64
符号なしの整数型
使用する機会はあまりないと思いますが紹介しておきます。
Int16、Int32、Int64型にはそれぞれ符号なしの型があり、
Uint16、Uint32、Uint64型です。
サイズと最大値は次の通りです。
データ型 | サイズ | 最小値・最大値 |
---|---|---|
UInt16 | 2バイト | 0 ~ 65,535 |
UInt32 | 4バイト | 0 ~ 4,294,967,295 |
UInt64 | 8バイト | 0 ~ 18,446,744,073,709,551,615 |