PowerShell: Int16・Int32・Int64型の違いと最小値・最大値

PowerShellでは整数値を格納するデータ型として Int16・Int32・Int64型があります。 これらのデータ型の違いと最小値・最大値を説明します。

各データ型のサイズはInt16型が2バイト、Int32型が4バイト、 Int64型が8バイトとなっています。 ですから格納できるデータの最小値・最大値は次のようになります。

データ型サイズ最小値・最大値
Int162バイト-32768 ~
32767
Int324バイト-2,147,483,648 ~
2,147,483,647
Int648バイト-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型です。
サイズと最大値は次の通りです。

データ型サイズ最小値・最大値
UInt162バイト0 ~ 65,535
UInt324バイト0 ~ 4,294,967,295
UInt648バイト0 ~ 18,446,744,073,709,551,615
PowerShell