トピック
    about_Arithmetic_Operators

簡易説明
    Windows PowerShell で算術演算を実行する演算子について説明します。

詳細説明

    算術演算子は数値の計算に使用します。1 つまたは複数の算術演算子を使用して、値の加算、減算、乗
    算、および除算を実行し、さらに除算の余り (法) を計算することができます。

    また、加算演算子 (+) と乗算演算子 (*) は文字列、配列、およびハッシュ テーブルにも使用できます。加
    算演算子は、入力を連結します。乗算演算子は、入力の複数コピーを返します。1 つの算術ステートメント
    に異なる複数のオブジェクト型を混在させることもできます。
    ステートメントの評価に使用されるメソッドは、式内の一番左にあるオブジェクトの型によって決まります。

    Windows PowerShell は、次の算術演算子をサポートしています。


    演算子    説明                                    例
    --------  -----------                             -------
    +         整数を加算します。文字列、配列、        6+2  
              およびハッシュ テーブルを連結します。   "file" + "name"
    -         一方の値から他方の値を減算します。      6-2
                                                      (get-date).date - 1
    -         数値を負の数にします。                  -6+2
                                                      -4

    *         整数を乗算します。文字列と配列を、      6*2
              指定された回数だけコピーします。        "w" * 3
                   
    /         2 つの値で除算を行います。              6/2
    %         除算の余りを返します。                  7%2
 
 

    演算子の優先順位
    Windows PowerShell では、算術演算子が次の順序で処理されます。

        かっこ ()
        - (負の数を表すマイナス記号)
        *、\、%
        +、- (減算を表すマイナス記号)


    式は、優先順位の規則に従って、左から右の方向に処理されます。次の例は、優先順位の規則による結果を示しています。

        C:\PS> 3+6/3*4
        11

        C:\PS> 10+4/2
        12

        C:\PS> (10+4)/2
        7

        C:\PS> (3+3)/ (1+1)
        3
 
    Windows PowerShell が式を評価する順序は、他のプログラミング言語やスクリプト言語と異なる場合があ
    ります。次の例は、複雑な代入ステートメントを示しています。

        C:\PS> $a = 0
        C:\PS> $b = 1,2
        C:\PS> $c = -1,-2
        
        C:\PS> $b[$a] = $c[$a++]
        
        C:\PS> $b
        1
        -1

    この例では、式 $a++ が $c[$a++] の前に評価されます。$a++ の評価によって、$a の値が変わります。
    $b[$a] の変数 $a は 0 ではなく 1 であるため、このステートメントでは $b[0] ではなく $b[1] に値が代入
    されます。



    数値以外の型の加算と乗算
    加算は、数値、文字列、配列、およびハッシュ テーブルを対象に行うことができます。乗算は、数値、文
    字列、および配列を対象に行うことができます。ハッシュ テーブルを対象にした乗算はできません。

    文字列、配列、またはハッシュ テーブルを加算すると、要素が連結されます。配列やハッシュ テーブル
    などのコレクションを連結すると、両方のコレクションに含まれていたオブジェクトから成る新しいオブジ
    ェクトが作成されます。同じキーを持つハッシュ テーブルを連結しようとすると、操作が失敗します。

    たとえば、次のコマンドでは 2 つの配列が作成され、これらが加算されます。


	C:\PS> $a = 1,2,3
	C:\PS> $b = "A","B,"C"
	C:\PS> $a + $b
	1
	2
	3
	A
	B
	C
 

    算術演算は、型が異なる複数のオブジェクトに対して行うこともできます。Windows PowerShell で実行さ
    れる演算は、演算内で一番左にあるオブジェクトの Microsoft .NET Framework 型によって決まります。
    Windows PowerShell は、演算に含まれるすべてのオブジェクトを、先頭のオブジェクトの Microsoft .NET 
    Framework 型に変換しようとします。
    オブジェクトの変換が成功したら、先頭のオブジェクトの Microsoft .NET Framework 型に適した演算が実
    行されます。いずれかのオブジェクトの変換が失敗した場合、演算が失敗します。

    次の例は、さまざまなオブジェクト型を含む演算において加算演算子と乗算演算子を使用する例を示しています。


        C:\PS> "file" + 16
        file16

        C:\PS> $array = 1,2,3
        C:\PS> $array + 16
        1
        2
        3
        16

	C:\PS> $array + "file"
        1
        2
        3
        file

        C:\PS> "file" * 3
        filefilefile
 
    ステートメントの評価に使用されるメソッドは一番左のオブジェクトによって決まるため、Windows 
    PowerShell での加算と乗算は厳密には可換ではありません。たとえば、(a + b) と (b + a) や、(a * b) と 
    (b * a) は、それぞれ必ずしも等しいわけではありません。

    次の例は、この原則を示しています。

        C:\PS> "file" + 2
        file2

        C:\PS> 2 + "file"
        値 "file" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
        行:1 文字:4
        + 2 + <<<< "file"

        C:\PS> "file" * 3
        filefilefile

        C:\PS> 3 * "file"
        値 "file" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
        行:1 文字:4
        + 3 * <<<< "file"
 

    ハッシュ テーブルの場合は若干異なります。ハッシュ テーブルは別のハッシュ テーブルに加算できま
    す。ハッシュ テーブルを配列に加算することもできます。ただし、その他の型をハッシュ テーブルに加算
    することはできません。

    次の例はそれぞれ、ハッシュ テーブルどうしを加算する方法と、ハッシュ テーブルを他のオブジェクト
    に加算する方法を示しています。


        C:\PS> $hash1 = @{a=1; b=2; c=3}
        C:\PS> $hash2 = @{c1="Server01"; c2="Server02"}
        C:\PS> $hash1 + $hash2

        Name                           Value
        ----                           -----
        c2                             Server02
        a                              1
        b                              2
        c1                             Server01
        c                              3


        C:\PS> $hash1 + 2
        別のハッシュ テーブルは、ハッシュ テーブルにのみ追加できます。
        行:1 文字:9
        + $hash1 + <<<< 2


        C:\PS> 2 + $hash1
        "System.Collections.Hashtable" を "System.Int32" に変換できません。
        行:1 文字:4
        + 2 + <<<< $hash1
 

    次の例は、ハッシュ テーブルを配列に加算できることを示しています。ハッシュ テーブル全体が、単一
    のオブジェクトとして配列に加算されます。


        C:\PS> $array = 1,2,3
        C:\PS> $array + $hash1
        1
        2
        3

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3


        C:\PS> $sum = $array + $hash1
        C:\PS> $sum.count
        4

        C:\PS> $sum[3]
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3


        PS C:\ps-test> $sum + $hash2
        1
        2
        3

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3
        c2                             Server02

    次の例は、同じキーを含むハッシュ テーブルは加算できないことを示しています。

        C:\PS> $hash1 = @{a=1; b=2; c=3}
        C:\PS> $hash2 = @{c="red"}
        C:\PS> $hash1 + $hash2
        演算子 '+' の引数が正しくありません。項目は既に追加されています。
        辞書のキー: 'c' 追加されるキー: 'c'
        行:1 文字:9
        + $hash1 + <<<< $hash2
 


    加算演算子は非常に有用ですが、要素をハッシュ テーブルや配列に追加するには代入演算子を使用しま
    す。詳細については、「about_assignment_operators」を参照してください。次の例は、+= 代入演算
    子を使用して項目を配列に追加する方法を示しています。

        C:\PS> $array
        1
        2
        3

        C:\PS> $array + "file"
        1
        2
        3
        file

        C:\PS> $array
        1
        2
        3

        C:\PS> $array += "file"
        C:\PS> $array
        1
        2
        3
        file

        C:\PS> $hash1

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3

        C:\PS> $hash1 += @{e = 5}
        C:\PS> $hash1

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        e                              5
        c                              3
 

    Windows PowerShell では、精度を落とさずに結果を最適に表現できる .NET Framework の数値型が自動的に
    選択されます。次にその例を示します。

        C:\PS> 2 + 3.1
        5.1
        C:\PS> (2).GetType().FullName
        System.Int32
        C:\PS> (2 + 3.1).GetType().FullName
        System.Double

    演算の結果が型に対して大きすぎる場合、次の例に示すように、
    その結果が収まるように結果の型が拡大変換されます。

        C:\PS> (512MB).GetType().FullName
        System.Int32
        C:\PS> (512MB * 512MB).GetType().FullName
        System.Double

    結果の型は、必ずしもいずれかのオペランドと同じになるわけではありません。次の例は、
    負の値を符号なし整数にキャストできないことと、符号なし整数は大きすぎて
    Int32 にはキャストできないことを示しています。

        C:\PS> ([int32]::minvalue + [uint32]::maxvalue).gettype().fullname
        System.Int64

    この例で、Int64 にはどちらの型も格納できています。

    System.Decimal 型は例外です。どちらかのオペランドが Decimal 型である場合、結果は Decimal 型になり
    ます。結果が Decimal 型には大きすぎる場合、Double にはキャストされません。代わりにエラーが表示さ
    れます。
    
        C:\PS> [Decimal]::maxvalue
        79228162514264337593543950335
        C:\PS> [Decimal]::maxvalue + 1
        Decimal 型の値が大きすぎるか、または小さすぎます。
        行:1 文字:22
        + [Decimal]::maxvalue + <<<< 1


    算術演算子と変数
    算術演算子は変数と共に使用することもできます。演算子は変数の値を操作します。
    次の例は、変数と共に算術演算子を使用する方法を示しています。

        C:\PS> $intA = 6
        C:\PS> $intB = 4
        C:\PS> $intA + $intB

        10 


        C:\PS> $a = "Windows "
        C:\PS> $b = "PowerShell "
        C:\PS> $c = 2
	C:\PS> $a + $b + $c

        Windows PowerShell 2


    算術演算子とコマンド
    通常、算術演算子は数値、文字列、および配列を含む式で使用します。
    ただし、コマンドによって返されるオブジェクトと、これらのオブジェクトのプロパティと共に
    算術演算子を使用することもできます。

    次の例は、Windows PowerShell のコマンドを含む式で算術演算子を使用する方法を示しています。


	C: \PS> get-date
	Wednesday, January 02, 2008 1:28:42 PM


	C: \PS> $day = new-timespan -day 1
	C: \PS> get-date + $day
	Thursday, January 03, 2008 1:34:52 PM


	C: \PS> get-process | where {($_.ws * 2) -gt 50mb}
	Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
	-------  ------    -----      ----- -----   ------     -- -----------
	   1896      39    50968      30620   264 1,572.55   1104 explorer
	  12802      78   188468      81032   753 3,676.39   5676 OUTLOOK
	    660       9    36168      26956   143    12.20    988 powershell
	    561      14     6592      28144   110 1,010.09    496 services
	   3476      80    34664      26092   234 ...45.69    876 svchost
	    967      30    58804      59496   416   930.97   2508 WINWORD
例
    次の例は、Windows PowerShell で算術演算子を使用する方法を示しています。

	C:\PS> 1 + 1
	2 

	C:\PS> 1 - 1
	0 

	C:\PS> -(6 + 3)
	-9 

	C:\PS> 6 * 2
	12 

	C:\PS> 7 / 2
	3.5 

	C:\PS> 7 % 2
	1 

	C:\PS> w * 3
	www

	C:\PS> 3 * "w"
	値 "w" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
	行:1 文字:4
	+ 3 * <<<< "w"

	PS C:\ps-test> "Windows" + " " + "PowerShell"
	Windows PowerShell

	PS C:\ps-test> $a = "Windows" + " " + "PowerShell"
	PS C:\ps-test> $a
	Windows PowerShell

	C:\PS> $a[0]
	W

	C:\PS> $a = "TestFiles.txt"
	C:\PS> $b = "C:\Logs\"
	C:\PS> $b + $a
	C:\Logs\TestFiles.txt

	C:\PS> $a = 1,2,3
	C:\PS> $a + 4
	1 
	2 
	3 
	4 

	C:\PS> $servers = @{0 = "LocalHost"; 1 = "Server01"; 2 = "Server02"}
	C:\PS> $servers + @{3 = "Server03"}
	Name Value
	---- ----- 
	3 Server03
	2 Server02
	1 Server01
	0 LocalHost

	C:\PS> $servers
	Name Value
	---- ----- 
	2 Server02
	1 Server01
	0 LocalHost

	C:\PS> $servers += @{3 = "Server03"} # 代入演算子を使用
	C:\PS> $servers
	Name Value
	---- ----- 
	3 Server03
	2 Server02
	1 Server01
	0 LocalHost


関連項目
    about_arrays
    about_assignment_operators
    about_comparison_operators
    about_hash_tables
    about_operators
    about_variables
    Get-Date
    New-TimeSpan




目次