O operador ^ em Java
^
em Java é o operador exclusivo-ou ("xor").
Vamos dar 5^6
como exemplo:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Esta é a tabela verdade para bit a bit ( JLS 15.22.1 ) e lógica ( JLS 15.22.2 ) xor:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Mais simplesmente, você também pode pensar em xor como "isto ou aquilo, mas não ambos !".
Veja também
Exponenciação em Java
Quanto à exponenciação de número inteiro, infelizmente o Java não possui esse operador. Você pode usar double Math.pow(double, double)
(converter o resultado para, int
se necessário).
Você também pode usar o truque tradicional de troca de bits para calcular alguns poderes de dois. Ou seja, (1L << k)
são duas à k- ésima potência para k=0..63
.
Veja também
Nota merge : esta resposta foi incorporada a partir de uma outra questão, onde a intenção era usar exponenciação para converter uma cadeia"8675309"
paraint
sem usarInteger.parseInt
como um exercício de programação (^
denota exponenciação de agora em diante). A intenção do OP era computar8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; a próxima parte desta resposta aborda que a exponenciação não é necessária para esta tarefa.
Esquema de Horner
Atendendo a sua necessidade específica , você realmente não precisa calcular vários poderes de 10. Você pode usar o que é chamado de esquema de Horner , que não é apenas simples, mas também eficiente.
Como você está fazendo isso como um exercício pessoal, não darei o código Java, mas aqui está a idéia 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
Pode parecer complicado no começo, mas realmente não é. Você basicamente lê os dígitos da esquerda para a direita e multiplica seu resultado até agora por 10 antes de adicionar o próximo dígito.
Em forma de tabela:
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