ja-JP/about_Arithmetic_Operators.help.txt

TOPIC
    about_Arithmetic_Operators

簡単な説明
    PowerShell で算術演算を行う演算子について説明します。

詳細な説明
    算術演算子は数値を計算します。1 つ以上の算術演算子を使って、値の
    加算、減算、乗算、除算を行ったり、除算の剰余 (モジュロ) を計算したり
    できます。

    加算演算子 (+) と乗算演算子 (*) は、文字列、配列、ハッシュテーブルに
    対しても動作します。加算演算子は入力を連結します。乗算演算子は入力の
    コピーを複数返します。算術文の中で異なる型のオブジェクトを混在させる
    こともできます。文の評価方法は、式の中で最も左にあるオブジェクトの型に
    よって決まります。

    PowerShell 2.0 以降、すべての算術演算子は 64 ビットの数値で動作します。

    PowerShell 3.0 以降、ビット演算をサポートするために -shr (右シフト) と
    -shl (左シフト) が追加されました。ビット演算子は整数型でのみ動作します。

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

        + 加算。数値の加算、文字列・配列・ハッシュテーブルの連結
        - 減算。数値の減算または符号反転
        * 乗算。数値の乗算、文字列・配列の指定回数の複製
        / 除算。数値の除算
        % 剰余 (モジュロ)。除算の余りを返す
        -band ビット単位 AND
        -bor ビット単位 OR (論理和)
        -bxor ビット単位 XOR (排他的論理和)
        -bnot ビット単位 NOT
        -shl ビットを左へシフト
        -shr ビットを右へシフト

    基本的な例:

        6 + 2 # 結果 = 8
        "file" + "name" # 結果 = "filename"
        @(1, "one") + @(2.0, "two") # 結果 = @(1, "one", 2.0, "two")
        @{"one" = 1} + @{"two" = 2} # 結果 = @{"one" = 1; "two" = 2}

        6 - 2 # 結果 = 4
        - -6 # 結果 = 6
        (Get-Date).AddDays(-1) # 昨日の日付

        6 * 2 # 結果 = 12
        @("!") * 4 # 結果 = @("!","!","!","!")
        "!" * 3 # 結果 = "!!!"

        6 / 2 # 結果 = 3
        7 % 2 # 結果 = 1

        5 -band 3 # 結果 = 1
        -bnot 5 # 結果 = -6
        5 -bor 0x03 # 結果 = 7
        5 -bxor 3 # 結果 = 6
        102 -shl 2 # 結果 = 408
        102 -shr 2 # 結果 = 25

演算子の優先順位
    PowerShell は算術演算子を次の順序で処理します。

        優先順位 演算子 説明
        1 () かっこ
        2 - 負の数または単項演算子
        3 *, /, % 乗算と除算
        4 +, - 加算と減算
        5 -band, -bnot ビット演算
        5 -bor, -bxor ビット演算
        5 -shr, -shl ビット演算

    PowerShell は優先順位の規則に従って、式を左から右へ評価します。

        3+6/3*4 # 結果 = 11
        3+6/(3*4) # 結果 = 3.5
        (3+6)/3*4 # 結果 = 12

除算と丸め
    除算の商が整数でない場合、PowerShell は値を最も近い整数に丸めます。
    値がちょうど .5 のときは、最も近い偶数の整数に丸めます (銀行家の
    丸め)。

        [int]( 5 / 2 ) # 結果は 2 (切り下げ)
        [int]( 7 / 2 ) # 結果は 4 (切り上げ)

    異なる丸め動作を得るには [Math] クラスを使用できます。

        [int][Math]::Round(5 / 2,[MidpointRounding]::AwayFromZero) # 3
        [int][Math]::Ceiling(5 / 2) # 3
        [int][Math]::Floor(5 / 2) # 2

結果に合わせた型変換
    PowerShell は、精度を失わずに結果を表現できる最適な .NET 数値型を
    自動的に選択します。

        2 + 3.1 # 5.1
        (2).GetType().FullName # System.Int32
        (2 + 3.1).GetType().FullName # System.Double

    結果が型に対して大きすぎる場合、結果を収められるように型が拡張
    されます。

        (512MB).GetType().FullName # System.Int32
        (512MB * 512MB).GetType().FullName # System.Double

    System.Decimal 型は例外です。いずれかのオペランドが Decimal 型の
    場合、結果は Decimal 型になります。Decimal の範囲を超える結果は
    エラーになります。

非数値型の加算と乗算
    数値、文字列、配列、ハッシュテーブルを加算できます。また、数値、
    文字列、配列を乗算できます。ただし、ハッシュテーブルは乗算できません。

    文字列、配列、ハッシュテーブルを加算すると、要素が連結されます。
    異なる型のオブジェクトに対して算術演算を行うこともできます。PowerShell
    が実行する演算は、演算の中で最も左のオブジェクトの .NET 型によって
    決まります。PowerShell はすべてのオブジェクトを最初のオブジェクトの
    .NET 型へ変換しようとします。変換に成功すれば演算を実行し、いずれかの
    変換に失敗すれば演算は失敗します。

        "file" + 16 # 結果 = "file16"
        $array + 16 # 結果 = 1,2,3,16
        $array + "file" # 結果 = 1,2,3,"file"
        $array * 2 # 結果 = 1,2,3,1,2,3
        "file" * 3 # 結果 = "filefilefile"

    評価方法が最も左のオブジェクトによって決まるため、PowerShell の加算と
    乗算は厳密には可換ではありません。たとえば (a + b) は (b + a) と常に
    等しいとは限りません。

        "file" + 16 # 結果は file16
        16 + "file" # 値 "file" を System.Int32 に変換できずエラー

ビット演算子
    PowerShell は標準的なビット演算子をサポートします。ビット単位 AND
    (-band)、ビット単位の包含 OR と排他 OR (-bor と -bxor)、ビット単位
    NOT (-bnot) です。PowerShell 3.0 以降、右シフト (-shr) と左シフト
    (-shl) が追加されました。

        演算子 説明 式 結果
        -band ビット単位 AND 10 -band 3 2
        -bor ビット単位 OR (包含) 10 -bor 3 11
        -bxor ビット単位 OR (排他) 10 -bxor 3 9
        -bnot ビット単位 NOT -bnot 10 -11
        -shl 左シフト 102 -shl 2 408
        -shr 右シフト 102 -shr 1 51

    ビット演算子は値の 2 進形式に対して作用します。たとえば数値 10 の
    ビット構造は 00001010、数値 3 のビット構造は 00000011 です (1 バイト
    の場合)。

    -shr (右シフト) 演算子は、符号付きの値をシフトするとき、左端に符号
    ビットをコピーします。符号なしの値の場合は、左端に 0 が挿入されます。

算術演算子と変数
    変数とともに算術演算子を使用することもできます。演算子は変数の値に
    対して作用します。

        $intA = 6
        $intB = 4
        $intA + $intB # 10

        $a = "Power"
        $b = "Shell"
        $a + $b # PowerShell

算術演算子とコマンド
    コマンドが返すオブジェクトや、そのオブジェクトのプロパティに対しても
    算術演算子を使用できます。

        (Get-Date) + (New-TimeSpan -Day 1)

        Get-Process | Where-Object { ($_.WS * 2) -gt 50mb }

関連項目
    about_Arrays
    about_Hash_Tables
    about_Operators
    about_Assignment_Operators
    about_Comparison_Operators
    about_Variables
    Get-Date
    New-TimeSpan

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP