# Assignment operators

Assignment operators assign a value to a variable. The most familiar assignment operator is the equals sign "=", however there are other assignment operators that act as "shortcuts" for several of the mathematical operators.

## General Syntax and Usage

The basic assignment operator assigns the value of the expression on the right-hand side of the operator to the variable on the left-hand side. For instance,

```x = 12 + 3;
```

assigns the value of 12 + 3 (which is of course 15) to the variable x. The complexity of the expression on the right-hand side of the operator is practically unlimited. The final value of the right-hand expression should be of the same data type as the variable on the left-hand side of the operator. For example, if the expression on the right ends up being a boolean true or false while the variable on the left is an integer or float, you may get unexpected results - or your script won't compile at all. See typecasting for additional details.

Due to the nature of the assignment operator, the left-hand operand must be a variable or an editable property (such as Link->HP, Link's hitpoints). You cannot use the assignment operator in statements like,

```12 + 3 = x;
```

or

```x + 2 = 3 - y;
```

These are invalid and will not compile.

Note, however, that the variable on the left-hand side of the operator may also appear in the right-hand expression. Keep in mind that the right-hand side expression is always evaluated first, and then the result is stored in the variable on the left-hand side. For instance, the two statements

```x = 10;
x = x + 10;
```

are executed as follows:

1. in the first statement, a value of 10 is assigned to x.
2. in the second statment, 10 is added to x for a final value of 20, and then that value of 20 is stored back into x.

## Variants of the Assignment Operator

Often times you will need to modify the value of a variable (or built-in property, like Link's hitpoints) and store the result back into the same variable or property. Using just the basic assignment operator, you would write such an operation as follows:

```// Add 16 hitpoints to Link's hitpoints.
```

Variants of the assignment operator can shorten such operations. In the previous example, the Additive Assignment Operator could be used as follows:

```// Add 16 hitpoints to Link's hitpoints.
```

Examples of the assignment operator variants are given below, but in all cases the variant is simply the desired operator (+, -, *, etc.) followed directly by the equals sign.

The additive assignment operator adds the expression on the right-hand side of the operator to the value of the variable on the left-hand side. For example,

```Link->HP += 16;
```

is the same as

```Link->HP = Link->HP + 16;
```

### Subtractive Assignment Operator

The subtractive assignment operator subracts the expression on the right-hand side of the operator from the value of the variable on the left-hand side. For example,

```Link->HP -= 16;
```

is the same as

```Link->HP = Link->HP - 16;
```

### Multiplicative Assignment Operator

The multiplicative assignment operator multiplies the the value of the variable on the left-hand side by the expression on the right-hand side. For example,

```Link->HP *= 2;
```

is the same as

```Link->HP = Link->HP * 2;
```

### Divisive Assignment Operator

The divisive assignment operator divides the the value of the variable on the left-hand side by the expression on the right-hand side. Bare in mind that division by 0 is undefined. For example,

```Link->HP /= 2;
```

is the same as

```Link->HP = Link->HP / 2;
```