항목
    about_Arithmetic_Operators

간단한 설명
    Windows PowerShell에서 산술을 수행하는 연산자에 대해 설명합니다.

자세한 설명

    산술 연산자는 숫자 값을 계산합니다. 하나 이상의 산술 연산자를 사용하여 값을 더하고 빼고 곱하고 나눌 수 
    있으며 나누기 연산의 나머지(모듈러스)를 계산할 수 있습니다.

    더하기 연산자(+)와 곱하기 연산자(*)는 문자열, 배열 및 해시 테이블에도 연산을 수행할 수 있습니다. 더하기 
    연산자는 입력을 연결하며 곱하기 연산자는 입력의 복사본을 여러 개 반환합니다. 산술문에서 개체 유형을 
    혼합할 수도 있습니다.
    문을 평가하는 데 사용되는 메서드는 식 맨 왼쪽에 있는 개체의 유형에 따라 결정됩니다.

    Windows PowerShell에서는 다음과 같은 산술 연산자를 지원합니다.


    연산자    설명                             	      예
    --------  -----------                             -------
    +         정수를 더하거나 문자열, 배열 및         6+2  "file" + "name"
	      해시 테이블을 연결합니다. 

    -         한 값을 다른 값에서 뺍니다.             6-2 (get-date).date - 

    -         숫자를 음수로 만듭니다.                 -6+2
                                                      -4

    *         정수를 곱하거나 문자열과 배열을         6*2
              지정된 횟수만큼 복사합니다.             "w" * 3

    /         두 값을 나눕니다.                       6/2

    %         나누기 연산의 나머지를 반환합니다.      7%2
 
 

    연산자 우선 순위
    Windows PowerShell에서는 다음 순서로 산술 연산자를 처리합니다.

        괄호()
        - (음수의 경우)
        *, /, %
        +, -(빼기의 경우)


    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]에 값을 할당합니다.



    숫자가 아닌 유형 더하기 및 곱하기
    숫자, 문자열, 배열 및 해시 테이블을 더하고 숫자, 문자열 및 배열을 곱할 수 있습니다. 그러나 해시 테이블을 
    곱할 수는 없습니다.

    문자열, 배열 또는 해시 테이블을 더하면 요소가 연결됩니다. 배열이나 해시 테이블 등의 컬렉션을 연결하면 두 
    컬렉션의 개체가 포함된 새 개체가 만들어집니다. 동일한 키의 해시 테이블을 연결하려고 하면 연산이 
    실패합니다.

    예를 들어, 다음 명령은 배열을 두 개 만들고 더합니다.


	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에서는 연산의 모든 개체를 첫 번째 개체의 .NET Framework 유형으로 변환하려고 
    합니다. 개체 변환에 성공하면 첫 번째 개체의 .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

        이름                           값
        ----                           -----
        a                              1
        b                              2
        c                              3


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

        C:\PS> $sum[3]
        이름                           값
        ----                           -----
        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
	2008년 1월 2일 수요일 오후 1:28:42


	C:\PS> $day = new-timespan -day 1
	C:\PS> get-date + $day
	2008년 1월 3일 목요일 오후 1:34:52


	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




목차