about_Arithmetic_Operators

Ó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 strings, 
    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, strings, 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 strings, 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 string 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 string 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, strings 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 
 string 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