L'opérateur ^ en Java
^
en Java est le ou-exclusif (xor) de l'opérateur.
Prenons 5^6
comme par exemple:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Ce la table de vérité pour bit-à-bit (JLS 15.22.1) et logique (JLS 15.22.2) xor:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Plus simplement, vous pouvez aussi penser de xor en tant que "ceci ou cela, mais pas les deux!".
Voir aussi
L'Exponentiation dans Java
Comme pour l'entier exponentiation, malheureusement Java ne dispose pas d'un tel opérateur. Vous pouvez utiliser double Math.pow(double, double)
(casting le résultat d' int
si nécessaire).
Vous pouvez également utiliser le traditionnel de décalage de bits astuce pour calculer certaines puissances de deux. C'est, (1L << k)
est les deux à la k-ième puissance pour k=0..63
.
Voir aussi
De fusion remarque: cette réponse a été fusionné à partir d'une autre question à laquelle il a l'intention d'utiliser une puissance de convertir une chaîne de caractères "8675309"
de int
sans l'aide d' Integer.parseInt
de la programmation de l'exercice (^
dénote l'exponentiation à partir de maintenant). L'OP a l'intention de calculer 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; la prochaine partie de cette réponse adresses que l'exponentiation est pas nécessaire pour cette tâche.
Le schéma de Horner
L'adressage de vos spécifiques de besoin, vous avez réellement n'avez pas besoin de calculer les diverses puissances de 10. Vous pouvez utiliser ce qu'on appelle le schéma de Horner, qui est non seulement simple mais aussi efficace.
Puisque vous êtes en train de faire 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
Il peut sembler compliqué au premier abord, mais il est vraiment pas. En gros, vous avez lu les chiffres de gauche à droite, et vous multipliez le résultat 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