# Assignment Operators

Go Up to Binary Operators Index

Syntax

```unary-expression  assignment-op  assignment-expression
```

Remarks

The assignment operators are:

```=    *=     /=     %=    +=    -=
<<=  >>=    &=     ^=    |=
```

The = operator is the only simple assignment operator, the others are compound assignment operators.

In the expression `E1 = E2`, `E1` must be a modifiable lvalue. The assignment expression itself is not an lvalue.

The expression

```E1 op= E2
```

has the same effect as

```E1 = E1 op E2
```

except the lvalue `E1` is evaluated only once. For example, `E1 += E2` is the same as `E1 = E1 + E2`.

The expression's value is `E1` after the expression evaluates.

For both simple and compound assignment, the operands `E1` and `E2` must obey one of the following rules:

1. `E1` is a qualified or unqualified arithmetic type and `E2` is an arithmetic type.
2. `E1` has a qualified or unqualified version of a structure or union type compatible with the type of `E2`.
3. `E1` and `E2` are pointers to qualified or unqualified versions of compatible types, and the type pointed to by the left has all the qualifiers of the type pointed to by the right.
4. Either `E1` or `E2` is a pointer to an object or incomplete type and the other is a pointer to a qualified or unqualified version of void. The type pointed to by the left has all the qualifiers of the type pointed to by the right.
5. `E1` is a pointer and `E2` is a null pointer constant.
Note: Spaces separating compound operators (`+`<space>`=`) will generate errors.
Note: There are certain conditions where assignment operators are not supported when used with properties.