![]() |
|||||||||||||
|
Unary operator |
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.
Contents |
As unary operations have only one operand they are evaluated before other operations containing them. Here is an example using negation:
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:
Technically there is also a unary positive but it is not needed since we assume a value to be positive:
Unary positive does not change the sign of a negative operation:
In this case a unary negative is needed to change the sign:
Generally, 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:
++x, x++−−x, x−−&x*x+x−x~x!xsizeof x, sizeof(type-name)(type-name) cast-expression++$x, $x++−−$x, $x−−+$x−$x-not $x.$x&$xtype-name cast-expressionIn 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.)