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 puedes pensar en xor como "esto o aquello, pero no ambos !".
Ver también
Exponenciación en Java
En cuanto a la exponenciación de enteros, desafortunadamente Java no tiene dicho operador. Puedes usar double Math.pow(double, double)
(enviar el resultado aint
si es necesario).
También puede usar el tradicional truco de desplazamiento de bits para calcular algunas potencias de dos. Es decir, (1L << k)
son dos para la k -ésima potencia para k=0..63
.
Ver también
Combinar nota : esta respuesta se fusionó a otra pregunta donde la intención era utilizar exponenciación para convertir una cadena"8675309"
aint
sin necesidad de utilizarInteger.parseInt
como un ejercicio de programación (^
denota exponenciación de ahora en adelante). La intención del OP era calcular8*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
Para abordar su necesidad específica , en realidad no necesita calcular varios poderes de 10. Puede usar lo que se llama el esquema de Horner , que no solo es simple sino también eficiente.
Como estás haciendo esto como un ejercicio personal, no daré el código Java, pero esta es 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 realmente 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