Qu'est-ce que l'opérateur ^ ne en Java Stack Overflow

Prenons 5 ^ 6 comme par exemple:

Cette table de vérité pour bitwise (JLS 15.22.1) et logique (JLS 15.22.2) XOR:

Plus simplement, vous pouvez aussi penser à XOR comme « ceci ou cela, mais pas les deux! ».

Exponentiation en Java

En ce qui concerne exponentiation entier, malheureusement Java ne dispose pas d'un tel opérateur. Vous pouvez utiliser le double Math.pow (doubles, doubles) (coulée du résultat int si nécessaire).

Vous pouvez également utiliser l'astuce traditionnelle un décalage de bits pour calculer des puissances de deux. C'est, (1L << k) is two to the k -th power for k=0..63 .

Note de fusion. cette réponse a été fusionnée d'une autre question où l'intention était d'utiliser exponentiation pour convertir une chaîne « 8675309 » int sans utiliser Integer.parseInt comme un exercice de programmation (^ signifie exponentiation à partir de maintenant). L'intention de l'OP est 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 répond que exponentiation est pas nécessaire pour cette tâche.

Le système de Horner

Répondre à vos besoins spécifiques, vous n'avez pas réellement besoin de calculer diverses puissances de 10. Vous pouvez utiliser ce qu'on appelle le schéma de Horner. qui est non seulement simple mais aussi efficace.

Depuis que vous faites cela comme un exercice personnel, je ne donnerai pas le code Java, mais voici l'idée principale:

Comme beaucoup de gens ont déjà souligné, il est l'opérateur XOR. Beaucoup de gens ont déjà souligné que si vous voulez exponentiation alors vous devez utiliser Math.pow.

Mais je pense qu'il est aussi utile de noter que ^ est juste un d'une famille d'opérateurs qui sont connus collectivement comme les opérateurs binaires:

Ces opérateurs peuvent être utiles lorsque vous avez besoin de lire et d'écrire des entiers où les bits individuels doivent être interprétés comme des drapeaux, ou quand une gamme spécifique de bits dans un entier ont une signification particulière et que vous voulez extraire uniquement les. Vous pouvez faire beaucoup de chaque programmation jour sans jamais avoir besoin d'utiliser ces opérateurs, mais si jamais vous avez à travailler avec des données au niveau du bit, une bonne connaissance de ces opérateurs est inestimable.

Lot beaucoup de gens ont déjà expliqué sur ce qu'il est et comment il peut être utilisé, mais en dehors de l'évidence, vous pouvez utiliser cet opérateur pour faire beaucoup de trucs de programmation comme

  • XOR de tous les éléments dans un tableau booléen vous dira si le tableau a un nombre impair de véritables éléments
  • Si vous avez un tableau avec tous les nombres répéter même nombre de fois, sauf celui qui répète un nombre impair de fois que vous pouvez constater que par XOR tous les éléments.
  • valeurs permutant sans utiliser la variable temporaire
  • Trouver le numéro manquant dans la gamme de 1 à n
  • validation de base de données envoyées sur le réseau.

Lot beaucoup de ces astuces peuvent être faites en utilisant des opérateurs bit sages, sujet intéressant à explorer.

répondit le 28 juillet '15 à 10h06

EJP
222k ● 21 ● ● 167 284

utiliser Math.pow à la place:

Les points de liaison de Arak à la définition de exclusive ou, ce qui explique comment fonctionne cette fonction pour deux valeurs booléennes.

La pièce manquante de l'information est la façon dont cela vaut pour deux nombres entiers (ou des valeurs de type nombre entier). Bitwise OU exclusif est appliquée à des paires de chiffres binaires correspondant à deux nombres, et les résultats sont ré-assemblées en un résultat entier.

Pour utiliser votre exemple:

  • La représentation binaire de 5 est 0101.
  • La représentation binaire de 4 est 0100.

Une façon simple de définir XOR est-à-dire au niveau du bit le résultat a un 1 dans tous les endroits où les deux nombres d'entrée diffèrent.

Avec 4 et 5, la seule différence est à la dernière place; alors

0101 ^ 0100 = 0001 (5 ^ 4 = 1).

C'est parce que vous utilisez l'opérateur XOR.

En java, ou à peu près toute autre langue, ^ est XOR, donc bien sûr,

Il est intéressant de voir comment Java et C # ne disposent pas d'un opérateur de puissance.

Il est l'opérateur XOR au niveau du bit en java qui entraîne une autre pour la valeur de bit (par exemple 1 ^ 0 = 1) et 0 pour une même valeur de bit (soit 0 ^ 0 = 0) quand un nombre est écrit sous forme binaire.

Pour utiliser votre exemple:

La représentation binaire de 5 est 0101. La représentation binaire de 4 est 0100.

Une façon simple de définir Bitwise XOR est-à-dire le résultat a un 1 dans tous les endroits où les deux nombres d'entrée diffèrent.

0101 ^ 0100 = 0001 (5 ^ 4 = 1).

Il est l'opérateur XOR au niveau du bit en java qui entraîne une valeur différente pour (soit 1 ^ 0 = 1) et 0 pour une même valeur (par exemple 0 ^ 0 = 0).

^ Est binaire (comme en base 2) xor, non exponentiation (qui ne sont pas disponibles en tant qu'opérateur Java). Pour exponentiation, voir java.lang.Math.pow ().

Dans d'autres langues comme Python vous pouvez faire 10 ** 2 = 100, essayez.

Pendant ce temps, en Groovy:

Exécution ci-dessus en utilisant groovyShell par exemple donne:

répondit le 21 juillet à 03h46

Ta Réponse

Articles Liés