Que fait l'opérateur ^ en Java?
quelle fonction L'opérateur ^
(caret) sert-il en Java?
Quand j'ai essayer ceci:
int a = 5^n;
... il me donne:
pour n= 5, renvoie 0
pour n = 4, renvoie 1
pour n = 6, renvoie 3
... donc je suppose qu'il n'effectue pas d'exponentiation. Mais qu'en est-il alors?
16 réponses
l'opérateur ^ en Java
^
en Java est l'opérateur exclusif ("xor").
prenons 5^6
comme 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 à xor comme "ce ou ça, mais pas les deux !".
Voir aussi
l'Exponentiation dans Java
comme pour l'exponentiation entière, malheureusement Java ne dispose pas d'un tel opérateur. Vous pouvez utiliser double Math.pow(double, double)
(si nécessaire).
vous pouvez également utiliser le tour traditionnel de bit-shifting pour calculer quelques pouvoirs de deux. C'est-à-dire, (1L << k)
est deux à la k - E puissance pour k=0..63
.
Voir aussi
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 de caractères
"8675309"
enint
sans utiliserInteger.parseInt
comme exercice de programmation (^
dénote une exponentiation à partir de maintenant). L'intention de L'OP é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 aborde que l'exponentiation n'est pas nécessaire pour cette tâche.
de claude bernard-Horner régime
S'adressant à votre spécifique besoin, vous n'avez pas besoin de calculer divers pouvoirs de 10. Vous pouvez utiliser ce qui est appelé le horner's scheme , qui est non seulement simple mais aussi efficace.
puisque vous faites cela comme un exercice personnel, Je ne vais pas donner 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 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
comme beaucoup de gens l'ont déjà souligné, c'est l'opérateur XOR . Beaucoup de gens ont déjà souligné que si vous voulez l'exponentiation alors vous devez utiliser Math.pow .
mais je pense qu'il est également utile de noter que ^
est juste un d'une famille d'opérateurs qui sont collectivement connus comme opérateurs 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.
à Partir de ici .
ces opérateurs peuvent être utiles lorsque vous avez besoin de lire et d'écrire sur des entiers où les bits individuels doivent être interprétés comme des drapeaux, ou lorsqu'une plage spécifique de bits dans un entier ont une signification particulière et que vous voulez en extraire seulement ceux. Vous pouvez faire beaucoup de programmation quotidienne sans jamais avoir besoin d'utiliser ces opérateurs, mais si vous avez à travailler avec des données au niveau bit, une bonne connaissance de ces opérateurs est inestimable.
c'est bitwise XOR, Java n'a pas d'opérateur exponentiation, vous devriez utiliser Math.pow()
à la place.
comme d'autres l'ont dit, C'est bitwise XOR. Si vous voulez élever un nombre à une puissance donnée, l'utilisation Math.pow(a , b)
, où a
est un nombre et b
est le pouvoir.
Beaucoup de gens ont déjà expliqué sur ce qu'il est et comment il peut être utilisé, mais en dehors de l'évidente vous pouvez utiliser cet opérateur pour faire beaucoup de programmation des trucs comme
- XORing de tous les éléments dans un booléen tableau vous dira si le tableau contient un nombre impair de vrais éléments
- si vous avez un tableau avec tous les nombres se répétant Pair nombre de fois sauf un qui se répète Impair nombre de fois, vous pouvez trouver que par XORing tous les éléments.
- changement de valeurs sans utiliser de variable temporaire
- constatation d'un nombre manquant dans l'intervalle de 1 à n
- validation de base des données envoyées sur le réseau.
beaucoup de tels trucs peuvent être faits en utilisant des opérateurs de bits sages, sujet intéressant à explorer.
utilisez les mathématiques.pow:
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html#pow%28double,%20double % 29
c'est l'opérateur XOR Bitwise en java qui donne 1 pour une valeur différente de bit (ie 1 ^ 0 = 1) et 0 pour la même valeur de bit (ie 0 ^ 0 = 0) lorsqu'un nombre est écrit sous forme binaire.
ex: -
pour utiliser votre exemple:
la représentation binaire de 5 est 0101. La représentation binaire de 4 0100.
une façon simple de définir Bitwise XOR est de dire que le résultat a un 1 dans chaque endroit où les deux numéros différents.
0101 ^ 0100 = 0001 (5 ^ 4 = 1) .
comme déjà indiqué par l'autre(S) réponse (s), c'est l'opérateur " exclusif ou "(XOR) . Pour plus d'informations sur les opérateurs bit en Java, voir: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html
le lien D'AraK pointe vers la définition d'exclusive-or, qui explique comment cette fonction fonctionne pour deux valeurs booléennes.
l'information manquante est la façon dont cela s'applique à deux entiers (ou valeurs de type entier). Exclusif Bitwise-ou est appliqué à des paires de chiffres binaires correspondants en deux nombres, et les résultats sont assemblés en un résultat entier.
pour utiliser votre exemple:
- le binaire la représentation de 5 est 0101.
- la représentation binaire de 4 est 0100.
une façon simple de définir bitwise XOR est de dire que le résultat a un 1 dans chaque endroit où les deux nombres d'entrée diffèrent.
avec 4 et 5, la seule différence est à la dernière place; donc
0101 ^ 0100 = 0001 (5 ^ 4 = 1) .
C'est parce que vous utilisez l'opérateur xor.
en java, ou à peu près n'importe quel autre langage, ^ est bitwise xor, alors bien sûr,
10 ^ 1 = 11. plus d'informations sur les opérateurs bitwise
C'est intéressant comme Java et C# n'ont pas d'opérateur.
règle de l'opérateur XOR = >
0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
représentation binaire des 4, 5 et 6:
4 = 1 0 0
5 = 1 0 1
6 = 1 1 0
maintenant, effectuer l'opération XOR sur 5 et 4:
5 ^ 4 => 1 0 1 (5)
1 0 0 (4)
----------
0 0 1 => 1
de même,
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
c'est l'opérateur XOR en java qui donne 1 pour une valeur différente (ie 1 ^ 0 = 1) et 0 pour la même valeur (ie 0 ^ 0 = 0).
^ est binaire (comme dans la base-2) xor, pas exponentiation (qui n'est pas disponible en tant qu'opérateur Java). Pour l'exponentiation, voir java.lang.Mathématique.pow ().
dans D'autres langues comme Python vous pouvez faire 10**2=100, essayez-le.
c'est opérateur XOR. Il est utilisé pour effectuer quelques opérations sur les nombres. Il a le comportement tel que lorsque vous faites une opération xor sur les mêmes bits dire 0 XOR 0 / 1 XOR 1 le résultat est 0. Mais si l'un des bits est différente, alors le résultat est 1. Donc quand vous avez fait 5^3 alors vous pouvez regarder ces nombres 5, 6 dans leurs formes binaires et ainsi l'expression devient (101) XOR (110) qui donne le résultat (011) dont la représentation décimale est 3.