Operadores unarios Java
Java

Operadores unarios Java – (Todo lo que debes saber)

Compártelo

Todo sobre los operadores unarios java

¡Los operadores unarios incluyen +, -, ++, -, ~,! y operadores de reparto. Las expresiones con operadores unarios se agrupan de derecha a izquierda, de modo que – ~ x significa lo mismo que – (~ x).

También te puede interesar:

 

UnaryExpression:

PreIncrementExpression

PreDecrementExpression

+ UnaryExpression

- UnaryExpression

UnaryExpressionNotPlusMinus

PreIncrementExpression:

++ UnaryExpression

PreDecrementExpression:

-- UnaryExpression

UnaryExpressionNotPlusMinus:

PostfixExpression

~ UnaryExpression

! UnaryExpression

CastExpression

The following productions from S15.15 are repeated here for convenience:

CastExpression:

( PrimitiveType ) UnaryExpression

( ReferenceType ) UnaryExpressionNotPlusMinus

Esta parte de la gramática de Java contiene algunos trucos para evitar dos posibles ambigüedades sintácticas.

La primera ambigüedad potencial surgiría en expresiones tales como (p) + q, que se ve, a un programador C o C ++, como si pudiera ser un elenco para escribir p de unario + operando en q, o una adición binaria de dos cantidades p y q.

En C y C ++, el analizador maneja este problema realizando una cantidad limitada de análisis semántico a medida que analiza, de modo que sabe si p es el nombre de un tipo o el nombre de una variable.

Java toma un enfoque diferente

El resultado del operador + debe ser numérico, y todos los nombres de tipo que participan en conversiones sobre valores numéricos son palabras clave conocidas.

Por lo tanto, si p es una palabra clave que nombra un tipo primitivo, entonces (p) + q solo puede tener sentido como un molde de una expresión unaria. Sin embargo, si p no es una palabra clave que nombra un tipo primitivo, entonces (p) + q solo puede tener sentido como una operación aritmética binaria.

Observaciones similares se aplican al operador 

La gramática mostrada arriba divide CastExpression en dos casos para hacer esta distinción. El UnaryExpression no terminal incluye todos los operadores unarios, pero el UnaryExpressionNotPlusMinus no terminal excluye los usos de todos los operadores unarios que también podrían ser operadores binarios, que en Java son + y -.

La segunda ambigüedad potencial es que la expresión (p) ++ podría, para un programador C o C ++, aparecer como un incremento de postfijo de una expresión entre paréntesis o el comienzo de un molde, por ejemplo, en (p) ++ q .

Como antes, los analizadores para C y C ++ saben si p es el nombre de un tipo o el nombre de una variable. Pero un analizador sintáctico que utiliza solo un análisis anticipado de un símbolo y ningún análisis semántico durante el análisis no podría decir, cuando ++ es el token de anticipación, si (p) debe considerarse una expresión primaria o si debe dejarse solo para su posterior consideración como parte de una CastExpression.

En Java, el resultado del operador ++ debe ser numérico, y todos los nombres de tipo que participan en las conversiones sobre valores numéricos son palabras clave conocidas. Por lo tanto, si p es una palabra clave que nombra un tipo primitivo, entonces (p) ++ solo puede tener sentido como un molde de una expresión de incremento de prefijo, y es mejor que haya un operando tal como q después del ++.

Sin embargo, si p no es una palabra clave que nombra un tipo primitivo, entonces (p) ++ solo puede tener sentido como un incremento de posfijo de p. Observaciones similares se aplican al operador -. Por lo tanto, el UnaryExpressionNotPlusMinus no terminal también excluye los usos de los operadores de prefijo ++ y -.

Operadores unarios +

El tipo de la expresión de operando del operador unario + debe ser un tipo numérico primitivo o se produce un error en tiempo de compilación. La promoción numérica unaria (S5.6.1) se realiza en el operando.

El tipo de expresión plus unario es el tipo promocionado del operando. El resultado de la expresión más unario no es una variable, sino un valor, incluso si el resultado de la expresión del operando es una variable.

En tiempo de ejecución, el valor de la expresión unario plus es el valor promocionado del operando.

Operadores unarios –

El tipo de expresión de operando del operador unario debe ser un tipo numérico primitivo o se produce un error en tiempo de compilación. La promoción numérica unaria  se realiza en el operando. El tipo de expresión unaria negativa es el tipo promocionado del operando.

En tiempo de ejecución, el valor de la expresión unario plus es la negación aritmética del valor promocionado del operando.

Para valores enteros, la negación es lo mismo que la resta de cero. Java usa una representación de complemento de dos para enteros, y el rango de los valores de complemento de dos no es simétrico, por lo que la negación del máximo negativo int o largo da como resultado el mismo número negativo máximo.

El desbordamiento ocurre en este caso, pero no se lanza ninguna excepción. Para todos los valores enteros x, -x es igual a (~ x) +1.

Para los valores de punto flotante, la negación no es lo mismo que la resta de cero, porque si x es +0.0, entonces 0.0-x es igual a +0.0, pero -x es igual a -0.0. Unario minus simplemente invierte el signo de un número de coma flotante. Casos especiales de interés:

Si el operando es NaN, el resultado es NaN (recuerde que NaN no tiene señal).
Si el operando es infinito, el resultado es el infinito del signo opuesto.
Si el operando es cero, el resultado es el cero del signo opuesto.

Espero que te haya gustado este articulo sobre los operadores unarios Java, déjanos tu comentario. Gracias por leernos.

Compártelo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *