# += -= /= *= >>= <<= &= |= %= (Assignment Operators)

## Purpose:

Operate and assign the value of an expression.

## Syntax:

val1 op= val2

 val1 - A scalar, series, or table. val2 - A scalar, series, or table.

## Returns:

A scalar, series, or table.

## Example:

j = 10;

j += 2;

Variable j contains the value 12.

## Example:

W1: {1, 2, 3, 4}

W1 += 2

W1 contains the series {3, 4, 5, 6}. Each value of the series is incremented by the value 2.0.

## Example:

a = {1, 2, 3, 4}

a &= 0x01

Variable a contains the series {1, 0, 1, 0} indicating the values that have the lowest bit set.

## Example:

b = {1, 2, 3, 4}

b |= 0x01

Variable b contains the series {1, 3, 3, 5}.

## Example:

b = {1, 2, 3, 4}

b |^= 0x01

Variable b contains the series {0, 3, 2, 5}.

## Remarks:

The following assignment operators are supported:

 Operator Description += add then assign -= subtract then assign *= multiply then assign /= divide then assign %= modulo then assign >>= bit right shift then assign <<= bit left shift then assign &= bit and shift then assign |= bit or then assign |^= bit xor then assign @= append then assign @@ concatenate

If e1 and e2 are expressions, then

e1 op= e2

is equivalent to

e1 = (e1) op (e2)

except that e1 is computed only once. Notice the parenthesis.

x *= y + 1

is equivalent to

x = x * (y + 1)

not

x = x * y + 1

Assignment operators are not only fast and concise, they correspond better to the way people think. We say "add 2 to j" or "increment j by 2," not "take j, add 2, then put the result back into j." Thus, j += 2.

The statement:

a = b @@ c

is more compact and equivalent to

a = concat(b, c)

The statement:

a @= b

is equivalent to

append(a, b)

The @= operator appends the series B to the end of series A in place. a @= b is much faster than a = a @@ b for large series because @= operates on the existing series whereas @@ creates and assigns a new series.

See DADiSP/VectorXL to optimize arithmetic operations on series.