Você está na página 1de 9

PICO

about_Arithmetic_Operators
DESCRIO RESUMIDA
Descreve os operadores que executam aritmtica no Windows PowerShell.
DESCRIO LONGA
Operadores aritmticos calculam valores numricos. Voc pode usar
um ou mais operadores aritmticos para somar, subtrair,
multiplicar e dividir valores, bem como para calcular o resto
(mdulo) de uma operao de diviso.
Alm disso, o operador de adio (+) e o operador de
multiplicao (*) tambm funciona em cadeias de caracteres,
matrizes e tabelas de hash. O operador de adio concatena a
entrada. O operador de multiplicao retorna vrias cpias da
entrada. Voc pode at mesmo misturar tipos de objetos em uma
instruo aritmtica.
O mtodo usado para avaliar a instruo determinado pelo tipo
do objeto mais esquerda na expresso.
O Windows PowerShell oferece suporte aos seguintes operadores
aritmticos:
Operador Descrio 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 nmero negativo. -6+2
-4
* Multiplica inteiros; copia cadeias 6*2
de caracteres e matrizes o nmero "w" * 3
especificado de vezes.

/ Divide dois valores. 6/2
% Retorna o resto de uma operao de 7%2
diviso.
PRECEDNCIA DE OPERADOR
O Windows PowerShell processa operadores aritmticos na seguinte
ordem:
Parnteses ()
- (para um nmero negativo)
*, /, %
+, - (para subtrao)
O Windows PowerShell processa as expresses da esquerda para a
direita de acordo com as regras de precedncia. Os exemplos a
seguir mostram o efeito das regras de precedncia:
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 expresses pode
diferir de outras linguagens de programao e scripts que voc
usou. O exemplo a seguir mostra uma instruo de atribuio
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 expresso $a++ avaliada antes de $c[$a++].
A avaliao de $a++ altera o valor de $a. A varivel $a em $b[$a]
igual a 1, no 0, de modo que a instruo atribua um valor a
$b[1], no a $b[0].
SOMANDO E MULTIPLICANDO TIPOS NO-NUMRICOS
Voc pode somar nmeros, cadeias de caracteres, matrizes e
tabelas de hash. E pode multiplicar nmeros, cadeias de
caracteres e matrizes. Porm, no possvel multiplicar tabelas
de hash.
Quando voc soma cadeias de caracteres, matrizes ou tabelas de
hash, os elementos so concatenados. Quando voc concatena
conjuntos, como matrizes ou tabelas de hash, um novo objeto
criado e contm os objetos de ambos os conjuntos. Se voc tentar
concatenar tabelas de hash que tm a mesma chave, a operao 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 tambm pode executar operaes aritmticas em objetos de
tipos diferentes. A operao que o Windows PowerShell executa
determinada pelo tipo do Microsoft .NET Framework do objeto mais
esquerda na operao.
O Windows PowerShell tenta converter todos os objetos na operao
para o tipo do .NET Framework do primeiro objeto. Se a converso
dos objetos for bem-sucedida, a operao apropriada ser executada
para o tipo do .NET Framework do primeiro objeto. Se a converso
de qualquer objeto falhar, a operao falhar.
O exemplo a seguir demonstra o uso dos operadores de adio e
multiplicao em operaes 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 mtodo usado para avaliar instrues determinado pelo
objeto mais esquerda, a adio e a multiplicao no Windows
PowerShell no so totalmente comutativas. Por exemplo, (a + b)
no sempre igual a (b + a) e (a * b) nem sempre igual a (b * a).
Os exemplos a seguir demonstram esse princpio:
C:\PS> "arquivo" + 2
arquivo2
C:\PS> 2 + "arquivo"
No possvel converter o valor "arquivo" para o tipo
"System.Int32". Erro: "A cadeia de caracteres de entrada no
est em um formato correto".
At line:1 char:4
+ 2 + <<<< "arquivo"
C:\PS> "arquivo" * 3
arquivoarquivoarquivo
C:\PS> 3 * "arquivo"
No possvel converter o valor "arquivo" para o tipo
"System.Int32". Erro: "A cadeia de caracteres de entrada no
est em um formato correto".
At line:1 char:4
+ 3 * <<<< "arquivo"

As tabelas de hash so um caso ligeiramente diferente. Voc pode
somar tabelas de hash. E pode adicionar uma tabela de hash a uma
matriz. Porm, no possvel 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
No possvel 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 no 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 dicionrio: 'c'; chave sendo
adicionada: 'c'.
At line:1 char:9
+ $hash1 + <<<< $hash2

Embora os operadores de adio sejam muito teis, use os operadores de
atribuio para adicionar elementos a tabelas de hash e matrizes.
Para obter mais informaes, consulte about_assignment_operators. Os
exemplos a seguir usam o operador de atribuio += 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 numrico do .NET
Framework que melhor expressa o resultado sem perder preciso. 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 operao 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 no necessariamente ser igual ao de um dos
operandos. No exemplo a seguir, o valor negativo no 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 exceo. 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 no ser convertido em
Double. Ao contrrio, 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 ARITMTICOS E VARIVEIS
Voc tambm pode usar operadores aritmticos com variveis. Os
operadores atuam nos valores das variveis. Os exemplos a seguir
demonstram o uso de operadores aritmticos com variveis:
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 ARITMTICOS E COMANDOS
Normalmente, voc usa os operadores aritmticos em expresses com
nmeros, cadeias de caracteres e matrizes. Porm, voc tambm
pode usar operadores aritmticos com os objetos que os comandos
retornam e com as propriedades desses objetos.
Os exemplos a seguir mostram como usar os operadores aritmticos
em expresses 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 aritmticos
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"
No possvel converter o valor "w" para o tipo "System.Int32". Erro: "A
cadeia de caracteres de entrada no 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 atribuio
C:\PS> $servers
Nome Valor
---- -----
3 Server03
2 Server02
1 Server01
0 LocalHost
CONSULTE TAMBM
about_arrays
about_assignment_operators
about_comparison_operators
about_hash_tables
about_operators
about_variables
Get-Date
New-TimeSpan

Você também pode gostar