L'opérateur ^ en Java
^
en Java est l'opérateur exclusif ou ("xor").
Prenons 5^6
comme exemple:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Voici la table de vérité pour xor au niveau du bit ( JLS 15.22.1 ) et logique ( JLS 15.22.2 ):
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Plus simplement, vous pouvez également considérer xor comme "ceci ou cela, mais pas les deux !".
Voir également
Exponentiation en Java
Quant à l'exponentiation d'entier, malheureusement Java n'a pas un tel opérateur. Vous pouvez utiliser double Math.pow(double, double)
(lancer le résultat int
si nécessaire).
Vous pouvez également utiliser l'astuce traditionnelle de décalage de bits pour calculer certains pouvoirs de deux. Autrement dit, (1L << k)
est deux à la puissance k-e pour k=0..63
.
Voir également
Note de fusion : cette réponse a été fusionnée à partir d'une autre question où l'intention était d'utiliser l'exponentiation pour convertir une chaîne"8675309"
enint
sans l'utiliserInteger.parseInt
comme un exercice de programmation (^
dénote désormais l'exponentiation). L'intention du PO était de calculer8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; la partie suivante de cette réponse explique que l'exponentiation n'est pas nécessaire pour cette tâche.
Le schéma de Horner
Pour répondre à vos besoins spécifiques , vous n'avez en fait pas besoin de calculer différentes puissances de 10. Vous pouvez utiliser ce que l'on appelle le schéma de Horner , qui est non seulement simple mais aussi efficace.
Puisque vous faites cela comme un exercice personnel, je ne donnerai pas le code Java, mais voici l'idée principale:
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
Cela peut sembler compliqué au début, mais ce n'est vraiment pas le cas. Vous lisez fondamentalement les chiffres de gauche à droite, et vous multipliez votre résultat jusqu'à présent par 10 avant d'ajouter le chiffre suivant.
Sous forme de tableau:
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