tipos significa relacionales que prioridad operadores datos condicionales comparacion aritmeticos java operators exponentiation

relacionales - que significa en java



¿Qué hace el operador ^ en Java? (16)

El operador ^ en Java

^ en Java es el operador exclusivo -o ("xor").

Tomemos 5^6 como ejemplo:

(decimal) (binary) 5 = 101 6 = 110 ------------------ xor 3 = 011

Esta es la tabla de verdad para bitwise ( JLS 15.22.1 ) y lógica ( JLS 15.22.2 ) xor:

^ | 0 1 ^ | F T --+----- --+----- 0 | 0 1 F | F T 1 | 1 0 T | T F

Más simplemente, también puede pensar en xor como "esto o aquello, pero no ambos ".

Ver también

Exposiciónción en Java

En cuanto a la exponenciación de enteros, desafortunadamente Java no tiene tal operador. Puede usar double Math.pow(double, double) ( double Math.pow(double, double) el resultado a int si es necesario).

También puedes usar el truco tradicional de desplazamiento de bits para calcular algunos poderes de dos. Es decir, (1L << k) es dos a la potencia k - k=0..63 para k=0..63 .

Ver también

Nota de fusión : esta respuesta se combinó de otra pregunta en la que la intención era usar exponenciación para convertir una cadena "8675309" en int sin usar Integer.parseInt como un ejercicio de programación ( ^ denota exponenciación de ahora en adelante). La intención del OP era calcular 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309 ; La siguiente parte de esta respuesta aborda que la exponenciación no es necesaria para esta tarea.

Esquema de horner

Al abordar su necesidad específica , en realidad no necesita computar varios poderes de 10. Puede usar lo que se llama el esquema de Horner , que no solo es simple sino también eficiente.

Ya que estás haciendo esto como un ejercicio personal, no daré el código Java, pero aquí está la idea principal:

8675309 = 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = (((((8*10 + 6)*10 + 7)*10 + 5)*10 + 3)*10 + 0)*10 + 9

Puede parecer complicado al principio, pero en realidad no lo es. Básicamente, lee los dígitos de izquierda a derecha y multiplica su resultado hasta ahora por 10 antes de agregar el siguiente dígito.

En forma de tabla:

step result digit result*10+digit 1 init=0 8 8 2 8 6 86 3 86 7 867 4 867 5 8675 5 8675 3 86753 6 86753 0 867530 7 867530 9 8675309=final

¿Qué función cumple el operador ^ (caret) en Java?

Cuando intento esto:

int a = 5^n;

...me da:

para n = 5, devuelve 0
para n = 4, devuelve 1
para n = 6, devuelve 3

... así que supongo que no realiza exponenciación. Pero ¿qué es entonces?


Como muchas personas ya han señalado, es el operador XOR . Muchas personas también han señalado que si quieres exponenciación, necesitas usar Math.pow .

Pero creo que también es útil tener en cuenta que ^ es solo uno de una familia de operadores que se conocen colectivamente como operadores bitwise:

Operator Name Example Result Description a & b and 3 & 5 1 1 if both bits are 1. a | b or 3 | 5 7 1 if either bit is 1. a ^ b xor 3 ^ 5 6 1 if both bits are different. ~a not ~3 -4 Inverts the bits. n << p left shift 3 << 2 12 Shifts the bits of n left p positions. Zero bits are shifted into the low-order positions. n >> p right shift 5 >> 2 1 Shifts the bits of n right p positions. If n is a 2''s complement signed number, the sign bit is shifted into the high-order positions. n >>> p right shift -4 >>> 28 15 Shifts the bits of n right p positions. Zeros are shifted into the high-order positions.

Desde here

Estos operadores pueden ser útiles cuando necesita leer y escribir en números enteros donde los bits individuales deben interpretarse como indicadores, o cuando un rango específico de bits en un número entero tiene un significado especial y desea extraer solo esos. Puede hacer una gran cantidad de programación diaria sin tener que utilizar estos operadores, pero si alguna vez tiene que trabajar con datos a nivel de bits, un buen conocimiento de estos operadores es invaluable.


Como otros lo han dicho, es XOR bitwise. Si desea aumentar un número a una potencia determinada, use Math.pow(a , b) , donde a es un número y b es la potencia.



El enlace de AraK apunta a la definición de exclusivo -o, lo que explica cómo funciona esta función para dos valores booleanos.

La información faltante es cómo esto se aplica a dos enteros (o valores de tipo entero). Exclusivo a nivel de bit o se aplica a pares de dígitos binarios correspondientes en dos números, y los resultados se vuelven a ensamblar en un resultado entero.

Para usar tu ejemplo:

  • La representación binaria de 5 es 0101.
  • La representación binaria de 4 es 0100.

Una forma sencilla de definir XOR a nivel de bit es decir que el resultado tiene un 1 en cada lugar donde los dos números de entrada difieren.

Con 4 y 5, la única diferencia está en el último lugar; asi que

0101 ^ 0100 = 0001 (5 ^ 4 = 1).


En otros idiomas como Python puedes hacer 10 ** 2 = 100, pruébalo.


Es XOR a nivel de bits, Java no tiene un operador de exponenciación, tendría que usar Math.pow() lugar.


Es el operador Bitwise xor en java el que da como resultado 1 para un valor diferente de bit (es decir, 1 ^ 0 = 1) y 0 para el mismo valor de bit (es decir, 0 ^ 0 = 0) cuando un número se escribe en forma binaria.

ex: -

Para usar tu ejemplo:

La representación binaria de 5 es 0101. La representación binaria de 4 es 0100.

Una forma sencilla de definir XOR de Bitwise es decir que el resultado tiene un 1 en cada lugar donde los dos números de entrada difieren.

0101 ^ 0100 = 0001 (5 ^ 4 = 1).


Es el operador XOR. Se usa para hacer operaciones de bit en números. Tiene el comportamiento tal que cuando realiza una operación xor en los mismos bits, dice 0 XOR 0/1 XOR 1, el resultado es 0. Pero si alguno de los bits es diferente, entonces el resultado es 1. Entonces, cuando hizo 5 ^ 3, entonces puede mirar estos números 5, 6 en sus formas binarias y, por lo tanto, la expresión se convierte en (101) XOR (110) que da el resultado (011) cuya representación decimal es 3.


Es el operador bit a bit XOR .


Es el operador x a nivel de bit en java el que da como resultado 1 para un valor diferente (es decir, 1 ^ 0 = 1) y 0 para el mismo valor (es decir, 0 ^ 0 = 0).


Esto se debe a que está utilizando el operador xor.

En java, o en casi cualquier otro idioma, ^ es bitwise xor, así que por supuesto,

10 ^ 1 = 11. más información sobre operadores bitwise

Es interesante cómo Java y C # no tienen un operador de potencia.


Muchas personas ya han explicado qué es y cómo se puede usar, pero aparte de lo obvio, puede usar este operador para hacer muchos trucos de programación como

  • El XOR de todos los elementos en una matriz booleana le diría si la matriz tiene un número impar de elementos verdaderos
  • Si tiene una matriz con todos los números que se repiten, incluso un número de veces, excepto uno que repite un número impar de veces, puede encontrar eso al XORAR todos los elementos.
  • Intercambiar valores sin usar variable temporal
  • Encontrar el número faltante en el rango de 1 a n
  • Validación básica de los datos enviados a través de la red.

Muchos de estos trucos se pueden hacer usando operadores inteligentes, un tema interesante para explorar.


Regla del operador XOR =>

0 ^ 0 = 0 1 ^ 1 = 0 0 ^ 1 = 1 1 ^ 0 = 1

Representación binaria de 4, 5 y 6:

4 = 1 0 0 5 = 1 0 1 6 = 1 1 0

ahora, realice la operación XOR en 5 y 4:

5 ^ 4 => 1 0 1 (5) 1 0 0 (4) ---------- 0 0 1 => 1

Similar,

5 ^ 5 => 1 0 1 (5) 1 0 1 (5) ------------ 0 0 0 => (0) 5 ^ 6 => 1 0 1 (5) 1 1 0 (6) ----------- 0 1 1 => 3


^ es binario (como en base-2) xor, no exponencialización (que no está disponible como operador de Java). Para exponenciación, vea java.lang.Math.pow ().