РАЗДЕЛ
    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




Содержание