ÓPICO
    about_Arithmetic_Operators

DESCRIÇÃO RESUMIDA
    Descreve os operadores que executam aritmética no Windows PowerShell.

DESCRIÇÃO LONGA

    Operadores aritméticos calculam valores numéricos. Você pode usar 
    um ou mais operadores aritméticos para somar, subtrair, 
    multiplicar e dividir valores, bem como para calcular o resto 
    (módulo) de uma operação de divisão.

    Além disso, o operador de adição (+) e o operador de 
    multiplicação (*) também funciona em cadeias de caracteres, 
    matrizes e tabelas de hash. O operador de adição concatena a 
    entrada. O operador de multiplicação retorna várias cópias da 
    entrada. Você pode até mesmo misturar tipos de objetos em uma 
    instrução aritmética.
    O método usado para avaliar a instrução é determinado pelo tipo 
    do objeto mais à esquerda na expressão.

    O Windows PowerShell oferece suporte aos seguintes operadores 
    aritméticos:


    Operador  Descrição                               Exemplo
    --------  -----------                             -------
    +         Adiciona inteiros; concatena cadeias    6+2
              de caracteres, matrizes e tabelas de    "nome" + "arquivo"
              hash.

    -         Subtrai um valor de outro.              6-2 
						      (get-date).date - 1 

    -         Torna um número negativo.               -6+2
                                                      -4

    *         Multiplica inteiros; copia cadeias      6*2
	      de caracteres e matrizes o número       "w" * 3
	      especificado de vezes.     
                   
    /         Divide dois valores.                    6/2


    %         Retorna o resto de uma operação de      7%2
              divisão.



    PRECEDÊNCIA DE OPERADOR
    O Windows PowerShell processa operadores aritméticos na seguinte 
    ordem:

        Parênteses ()
        - (para um número negativo)
        *, /, %
        +, - (para subtração)


    O Windows PowerShell processa as expressões da esquerda para a 
    direita de acordo com as regras de precedência. Os exemplos a 
    seguir mostram o efeito das regras de precedência: 

        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
 
    A ordem na qual o Windows PowerShell avalia expressões pode 
    diferir de outras linguagens de programação e scripts que você 
    usou. O exemplo a seguir mostra uma instrução de atribuição 
    complicada.

        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

    Neste exemplo, a expressão $a++ é avaliada antes de $c[$a++].  
    A avaliação de $a++ altera o valor de $a. A variável $a em $b[$a] é 
    igual a 1, não 0, de modo que a instrução atribua um valor a 
    $b[1], não a $b[0].



    SOMANDO E MULTIPLICANDO TIPOS NÃO-NUMÉRICOS
    Você pode somar números, cadeias de caracteres, matrizes e 
    tabelas de hash. E pode multiplicar números, cadeias de 
    caracteres e matrizes. Porém, não é possível multiplicar tabelas 
    de hash.

    Quando você soma cadeias de caracteres, matrizes ou tabelas de 
    hash, os elementos são concatenados. Quando você concatena 
    conjuntos, como matrizes ou tabelas de hash, um novo objeto é 
    criado e contém os objetos de ambos os conjuntos. Se você tentar 
    concatenar tabelas de hash que têm a mesma chave, a operação falhará.

    Por exemplo, os comandos a seguir criam duas matrizes e, em 
    seguida, as soma:


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

    Você também pode executar operações aritméticas em objetos de 
    tipos diferentes. A operação que o Windows PowerShell executa é 
    determinada pelo tipo do Microsoft .NET Framework do objeto mais 
    à esquerda na operação.
    O Windows PowerShell tenta converter todos os objetos na operação 
    para o tipo do .NET Framework do primeiro objeto. Se a conversão 
    dos objetos for bem-sucedida, a operação apropriada será executada 
    para o tipo do .NET Framework do primeiro objeto. Se a conversão 
    de qualquer objeto falhar, a operação falhará. 

    O exemplo a seguir demonstra o uso dos operadores de adição e 
    multiplicação em operações que incluem tipos de objeto diferentes:


        C:\PS> "arquivo" + 16
        arquivo16

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

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

        C:\PS> "arquivo" * 3
        arquivoarquivoarquivo
 
    Como o método usado para avaliar instruções é determinado pelo 
    objeto mais à esquerda, a adição e a multiplicação no Windows 
    PowerShell não são totalmente comutativas. Por exemplo, (a + b) 
    não é sempre igual a (b + a) e (a * b) nem sempre é igual a (b * a).

    Os exemplos a seguir demonstram esse princípio:

        C:\PS> "arquivo" + 2
        arquivo2

        C:\PS> 2 + "arquivo"
        Não é possível converter o valor "arquivo" para o tipo 
        "System.Int32". Erro: "A cadeia de caracteres de entrada não 
        está em um formato correto".
        At line:1 char:4
        + 2 + <<<< "arquivo"

        C:\PS> "arquivo" * 3
        arquivoarquivoarquivo

        C:\PS> 3 * "arquivo"
        Não é possível converter o valor "arquivo" para o tipo 
        "System.Int32". Erro: "A cadeia de caracteres de entrada não 
        está em um formato correto".
        At line:1 char:4
        + 3 * <<<< "arquivo"
 

    As tabelas de hash são um caso ligeiramente diferente. Você pode 
    somar tabelas de hash. E pode adicionar uma tabela de hash a uma 
    matriz. Porém, não é possível adicionar qualquer outro tipo a uma 
    tabela de hash. 

    Os exemplos a seguir mostram como adicionar tabelas de hash entre 
    si e a outros objetos:


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

        Nome                           Valor
        ----                           -----
        c2                             Server02 
	a			       1
        b                              2
        c1                             Server01 
	c   			       3


        C:\PS> $hash1 + 2
        Você pode adicionar outra tabela de hash somente a uma tabela 
        de hash.
        At line:1 char:9
        + $hash1 + <<<< 2


        C:\PS> 2 + $hash1
        Não é possível converter "System.Collections.Hashtable" em 
        "System.Int32".
        At line:1 char:4
        + 2 + <<<< $hash1
 

    Os exemplos a seguir demonstram que você pode adicionar uma 
    tabela de hash a uma matriz. A tabela de hash inteira é 
    adicionada à matriz como um único objeto.


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

        Nome                           Valor
        ----                           -----
        a                              1
        b                              2
        c                              3


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

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


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

        Nome                           Valor
        ----                           -----
        a                              1
        b                              2
        c                              3
        c2                             Server02 

    O exemplo a seguir mostra que você não pode adicionar tabelas de 
    hash que contenham a mesma chave:

        C:\PS> $hash1 = @{a=1; b=2; c=3}
        C:\PS> $hash2 = @{c="red"}
        C:\PS> $hash1 + $hash2
        Argumento incorreto para o operador '+': O item já foi 
        adicionado. Chave contida no dicionário: 'c'; chave sendo 
        adicionada: 'c'.
        At line:1 char:9
        + $hash1 + <<<< $hash2
 


    Embora os operadores de adição sejam muito úteis, use os operadores de 
    atribuição para adicionar elementos a tabelas de hash e matrizes. 
    Para obter mais informações, consulte about_assignment_operators. Os 
    exemplos a seguir usam o operador de atribuição += para adicionar 
    itens a uma matriz:

        C:\PS> $array
        1
        2
        3

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

        C:\PS> $array
        1
        2
        3

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

        C:\PS> $hash1

        Nome                           Valor
        ----                           -----
        a                              1
        b                              2
        c                              3

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

        Nome                           Valor
        ----                           -----
        a                              1
        b                              2
        e                              5
        c                              3
 

    O Windows PowerShell seleciona automaticamente o tipo numérico do .NET 
    Framework que melhor expressa o resultado sem perder precisão. Por 
    exemplo:

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

    Se o resultado de uma operação for muito grande para o tipo, o tipo do 
    resultado será ampliado para acomodar o resultado, como no exemplo a 
    seguir: 

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

    O tipo de resultado não necessariamente será igual ao de um dos 
    operandos. No exemplo a seguir, o valor negativo não pode ser 
    convertido em um inteiro sem sinal, e o inteiro sem sinal é muito 
    grande para ser convertido em Int32:

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

    Neste exemplo, o Int64 pode acomodar ambos os tipos.

    O tipo System.Decimal é uma exceção. Se um dos operandos tiver o 
    tipo Decimal, o resultado será do tipo Decimal. Se o resultado 
    for muito grande para o tipo Decimal, ele não será convertido em 
    Double. Ao contrário, ocorrerá um erro.
    
        C:\PS> [Decimal]::maxvalue
        79228162514264337593543950335
        C:\PS> [Decimal]::maxvalue + 1
        O valor era muito grande ou muito pequeno para Decimal.
        At line:1 char:22
        + [Decimal]::maxvalue + <<<< 1


    OPERADORES ARITMÉTICOS E VARIÁVEIS
    Você também pode usar operadores aritméticos com variáveis. Os 
    operadores atuam nos valores das variáveis. Os exemplos a seguir 
    demonstram o uso de operadores aritméticos com variáveis:

        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 


    OPERADORES ARITMÉTICOS E COMANDOS
    Normalmente, você usa os operadores aritméticos em expressões com 
    números, cadeias de caracteres e matrizes. Porém, você também 
    pode usar operadores aritméticos com os objetos que os comandos 
    retornam e com as propriedades desses objetos.

    Os exemplos a seguir mostram como usar os operadores aritméticos 
    em expressões com comandos do Windows PowerShell:


	C:\PS> get-date
	Quarta-feira, 02 de janeiro de 2008 1:28:42 PM


	C:\PS> $day = new-timespan -day 1
	C:\PS> get-date + $day
	Quinta-feira, 03 de janeiro de 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


EXEMPLOS
    Os exemplos a seguir mostram como usar os operadores aritméticos 
    no 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" 
	Não é possível converter o valor "w" para o tipo "System.Int32". Erro: "A 
	cadeia de caracteres de entrada não está em um formato correto". 
	At line:1 char: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 = "ArquivosTeste.txt" 
	C:\PS> $b = "C:\Logs\" 
	C:\PS> $b + $a 
	C:\Logs\ArquivosTeste.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"} 
	Nome Valor 
	---- ----- 
	3 Server03 
	2 Server02 
	1 Server01 
	0 LocalHost 

	C:\PS> $servers 
	Nome Valor 
	---- ----- 
	2 Server02 
	1 Server01 
	0 LocalHost 

	C:\PS> $servers += @{3 = "Server03"} #Usar operador de atribuição 
	C:\PS> $servers 
	Nome Valor 
	---- ----- 
	3 Server03 
	2 Server02 
	1 Server01 
	0 LocalHost 


CONSULTE TAMBÉM
    about_arrays
    about_assignment_operators
    about_comparison_operators
    about_hash_tables
    about_operators
    about_variables
    Get-Date
    New-TimeSpan




Sumário