In mathematics, a **unary operation** is an operation with only one operand, i.e. an operation with a single input, or in other words, a function of one variable (for the terminology see also operators versus functions).

Common notations are prefix notation (+, −, not), postfix notation (factorial: n!), and functional notation (sin x or sin (x)). In the case of the square root a horizontal bar over the argument extending the square root sign can indicate the extent of the argument, so that parentheses can be dispensed with.

As unary operations have only one operand they are evaluated before other operations containing them are. In this example using addition:

3 − −2

Here the first '−' represents the binary subtraction operation, while the second '−' represents the unary negation of the two, a clearer way to write the expression would be:

3 − (−2) = 5

Technically there is also a unary positive but it is not needed since we assume a value to be positive:

(+2) = 2

Unary positive does not change the sign of a negative operation:

(+(−2)) = (−2)

In the case a unary negative is needed to change the sign:

(−(−2)) = (+2)

- the absolute value operation is a unary operation on the real numbers
- the opposite operation (−x) on the real numbers
- the power operations (squaring, cubing, etc) on the real numbers
- the factorial operation on the non-negative integer numbers
- the trigonometric functions (sin x, cos x, tan x, cot x, csc x, sec x) on the real numbers
- the natural logarithm (ln x) on the real numbers
- the logarithm of base 10 (log x) on the real numbers
- logical negation on truth values
- A unary operation on a given set
*S*is a function*S*→*S*, also called an endomorphism of*S*.

Unary operators (called "monadic" in APL) are also used in programming languages.

In the C family of languages, the following operators are unary:

- Increment:
`++x, x++`

- Decrement:
`−−x, x−−`

- Address:
`&x`

- Indirection:
`*x`

- Positive:
`+x`

- Negative:
`−x`

- One's complement:
`~x`

- Logical negation:
`!x`

- Sizeof:
`sizeof x, sizeof(type-name)`

- Cast:
`(`

*type-name*)*cast-expression*

- Increment:
`++$x, $x++`

- Decrement:
`−−$x, $x−−`

- Positive:
`+$x`

- Negative:
`−$x`

- Logical negation:
`-not $x`

- Invoke in current scope:
`.$x`

- Invoke in new scope:
`&$x`

- Cast:
`[`

*type-name*]*cast-expression*

In most programming languages, incremental and decremental operators can be prefixed and suffixed to the variable. The prefix and suffix can be useful when manipulating variables. A suffixed operation increments the value after it has been called.

Order of evaluation for arguments in function calls is unspecified according to C99. Because of this, a compiler might produce results that appear to be transposed. The output of the examples below are compiler-specific and depends on implementation. To avoid this behavior and minimize dependence, the code could be rewritten.

In the examples below, the integer arguments are evaluated left to right.

```
int i = 0;
printf (" %d \n %d ", i++, i++);
```

**Output:**

0 1

Whereas a prefixed operation will increment the value before it has been called.

```
int i = 0;
printf (" %d \n %d ", ++i, ++i);
```

**Output:**

1 2

The usage of incremental and decremental operators is usually found in For loops.

In Unix shell scripting (usually bash) and other utilities such as Makefiles, the "$" is a unary operator that translates the name of a variable into its contents. Many people confuse this with a sigil (as used in PHP/Perl), but it is properly a *unary operator* for lexical indirection, similar to the * indirection operator for pointers in C. (This is why bash only uses *$* when "reading" from variables, but not when "writing" to them.)