РАЗДЕЛ
	about_Arithmetic_Operators

КРАТКОЕ ОПИСАНИЕ
	Описание арифметических операторов, используемых в Windows PowerShell.

ПОЛНОЕ ОПИСАНИЕ

	Арифметические операторы используются для вычисления числовых 
	значений. Можно использовать один или несколько арифметических 
	операторов для сложения, вычитания, умножения и деления значений, 
	а также для вычисления остатка при операции деления.

	Кроме того, оператор сложения (+) и оператор умножения (*) также 
	используются при работе со строками, массивами и хэш-таблицами. 
	Оператор сложения объединяет введенные данные. Оператор умножения 
	возвращает несколько копий входных данных. В арифметическом 
	операторе могут даже использоваться объекты различных типов.
	Метод, используемый для вычисления результата оператора, 
	определяется типом самого левого объекта в выражении.

	В Windows PowerShell поддерживаются следующие арифметические 
	операторы.


	Оператор  Описание								Пример
	--------  -----------							 -------
	+		 Сложение целых чисел; объединение	 6+2  
			строк, массивов и хэш-таблиц.		 "имя" + "файла"

	-		 Вычитание одного значения			 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 изменяется. Переменная $a в 
	выражении $b[$a] равняет 1, а не 0, поэтому оператор назначает 
	значение $b[1], а не $b[0].



	СЛОЖЕНИЕ И УМНОЖЕНИЕ НЕЧИСЛОВЫХ ТИПОВ
	Можно складывать числа, строки, массивы и хэш-таблицы. Также 
	можно умножать числа, строки и массивы. Однако, хэш-таблицы не могут 
	использоваться в операторе умножения.

	При сложении строк, массивов или хэш-таблиц элементы объединяются. При 
	объединении коллекций, например массивов или хэш-таблиц, создается 
	новый объект, в котором содержатся объекты из обеих коллекций. 
	При попытке объединения хэш-таблиц, содержащих общий ключ, операция 
	завершается неудачей.

	Например, следующая команда создает два массива и выполняет их 
	сложение:


		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 
	пытается преобразовать все объекты, участвующие в операции, в тип 
	платформы Microsoft .NET Framework первого объекта. Если 
	преобразование объектов завершается успешно, выполняется 
	операция, соответствующая типу платформы Microsoft .NET Framework 
	первого объекта. Если преобразовать любой из объектов не удается, 
	операция завершается неудачей. 

	В следующем примере показано использование операторов сложения и 
	умножения в операциях с объектами различных типов.


		C:\PS> "файл" + 16
		файл16

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

		C:\PS> $array + "файл"
		1
		2
		3
		файл

		C:\PS> "файл" * 3
		файлфайлфайл
 
	Поскольку метод, используемый для вычисления результата 
	оператора, определяется типом самого левого объекта в выражении, 
	сложение и умножение в Windows PowerShell не являются строго 
	коммутативными. Например, (a + b) не всегда равняется (b + a), а 
	(a * b) не всегда равняется (b * a).

	Этот принцип показан в следующем примере.

		C:\PS> "файл" + 2
		файл2

		C:\PS> 2 + "файл"
		Не удается преобразовать значение "файл" в тип "System.Int32".
		Ошибка: "Неверный формат строки ввода."
		В строке:1 знак:4
		+ 2 + <<<< "файл"

		C:\PS> "файл" * 3
		файлфайлфайл

		C:\PS> 3 * "файл"
		Не удается преобразовать значение "файл" в тип "System.Int32".
		Ошибка: "Неверный формат строки ввода."
		В строке:1 знак:4
		+ 3 * <<<< "файл"
 

	Обработка хэш-таблиц выполняется несколько по-другому. 
	Допускается сложение хэш-таблиц. Также можно добавить хэш-таблицу 
	к массиву. Тем не менее, нельзя добавить переменную любого 
	другого типа к хэш-таблице. 

	В следующих примерах показано сложение хэш-таблиц друг с другом и 
	с другими объектами.


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

		Имя							Значение
		----						 -----
		c2							 Server02 1
		b							2
		c1							 Server01 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

		Имя						 Значение
		----						 -----
		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 + "файл"
		1
		2
		3
		файл

		C:\PS> $array
		1
		2
		3

		C:\PS> $array += "файл"
		C:\PS> $array
		1
		2
		3
		файл

		C:\PS> $hash1

		Имя						 Значение
		----						 -----
		a							1
		b							2
		c							3

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

		Имя						 Значение
		----						 -----
		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
		Среда, 02 января 2008 г., 13:28:42


		C:\PS> $day = new-timespan -day 1
		C:\PS> get-date + $day
		Четверг, 03 января 2008 г., 13: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" в тип "Systm.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"} 
		Имя Значение 
		---- ----- 
		3 Server03 
		2 Server02 
		1 Server01 
		0 LocalHost 

		C:\PS> $servers 
		Имя Значение 
		---- ----- 
		2 Server02 
		1 Server01 
		0 LocalHost 

		C:\PS> $servers += @{3 = "Server03"} #Используйте оператор назначения 
		C:\PS> $servers 
		Имя Значение 
		---- ----- 
		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