PowerShell HelpFile - about_Arithmetic_Operators
 記事記号:[me1513] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    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 Framewor
    k 型に適した演算が実行されます。いずれかのオブジェクトの変換が失敗した場合、
    演算が失敗します。

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

        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 Framewo
    rk の数値型が自動的に選択されます。次にその例を示します。

        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
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_Arithmetic_Operators
ご利用数: 1914044
感想・要望・問い合わせは こちら