it-swarm.com.de

Was macht der ^ Operator in Java?

Welche Funktion hat der ^ (Caret) Operator in Java?

Wenn ich das versuche:

int a = 5^n;

...es gibt mir:

für n = 5 wird 0 zurückgegeben
für n = 4 wird 1 zurückgegeben
für n = 6 wird 3 zurückgegeben 

... Ich denke also, es führt keine Potenzierung durch. Aber was ist es dann?

249
joroj

Der Operator ^ in Java

^ in Java ist der Exklusiv-Oder-Operator ("xor").

Nehmen wir 5^6 als Beispiel:

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011

Dies ist die Wahrheitstabelle für bitweise ( JLS 15.22.1 ) und logische ( JLS 15.22.2 ) xor:

^ | 0 1      ^ | F T
--+-----     --+-----
0 | 0 1      F | F T
1 | 1 0      T | T F

Einfacher kann man sich xor auch als "dieses oder das, aber nicht beide!" Vorstellen.

Siehe auch


Potenzierung in Java

In Bezug auf die Integer-Potenzierung verfügt Java leider nicht über einen solchen Operator. Sie können double Math.pow(double, double) verwenden (ggf. das Ergebnis in int verschieben).

Sie können auch den traditionellen Bit-Shifting-Trick verwenden, um einige Zweierpotenzen zu berechnen. Das heißt, (1L << k) ist zwei zu der k- ten Potenz für k=0..63.

Siehe auch


Notiz zusammenführen: Diese Antwort wurde aus einer anderen Frage zusammengeführt, bei der die Exponentiation verwendet werden sollte, um eine Zeichenfolge "8675309" in int zu konvertieren, ohne Integer.parseInt als Programmierübung zu verwenden (^ bezeichnet von nun an Exponentiation). Die Absicht des OP bestand darin, 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309 zu berechnen. Im nächsten Teil dieser Antwort wird darauf hingewiesen, dass die Exponentiation für diese Aufgabe nicht erforderlich ist.

Horners Schema

Um Ihren spezifischen Bedarf zu befriedigen, müssen Sie nicht die verschiedenen Potenzen von 10 berechnen. Sie können das sogenannte Horner-Schema verwenden, das nicht nur einfach, sondern auch effizient ist.

Da Sie dies als persönliche Übung tun, gebe ich keinen Java-Code, aber hier ist die Hauptidee:

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

Es mag auf den ersten Blick kompliziert aussehen, ist es aber wirklich nicht. Sie lesen im Wesentlichen die Ziffern von links nach rechts und multiplizieren Ihr bisheriges Ergebnis mit 10, bevor Sie die nächste Ziffer hinzufügen.

In Tabellenform:

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
384

Wie viele Leute bereits darauf hingewiesen haben, ist es der Operator XOR . Viele Leute haben auch schon darauf hingewiesen, dass, wenn Sie eine Exponentiation wollen, Sie Math.pow verwenden müssen.

Ich denke, es ist auch nützlich zu wissen, dass ^ nur einer von einer Familie von Operatoren ist, die zusammen als bitweise Operatoren bezeichnet werden:

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.

Von hier .

Diese Operatoren können nützlich sein, wenn Sie Ganzzahlen lesen und schreiben müssen, bei denen die einzelnen Bits als Flags interpretiert werden sollen, oder wenn ein bestimmter Bitbereich in einer Ganzzahl eine besondere Bedeutung hat und Sie nur diese extrahieren möchten. Sie können jeden Tag viel programmieren, ohne diese Operatoren verwenden zu müssen. Wenn Sie jedoch jemals mit Daten auf Bit-Ebene arbeiten müssen, ist eine gute Kenntnis dieser Operatoren von unschätzbarem Wert.

140
Mark Byers

Es ist bitweise XOR, Java hat keinen Exponentiation-Operator, Sie müssten stattdessen Math.pow() verwenden.

32
Dan Dyer

Es ist der Operator XOR bitwise.

17
AraK

Wie andere gesagt haben, ist es bitweise XOR. Wenn Sie eine Zahl auf eine bestimmte Potenz erhöhen möchten, verwenden Sie Math.pow(a , b) , wobei a eine Zahl und b die Potenz ist.

14
Jon Skeet

Viele Leute haben bereits erklärt, was es ist und wie es verwendet werden kann, aber neben dem offensichtlichen können Sie diesen Operator verwenden, um viele Programmier-Tricks zu machen

  • Die XOR-Verknüpfung aller Elemente in einem booleschen Array würde Ihnen sagen, ob das Array eine ungerade Anzahl wahrer Elemente hat
  • Wenn Sie ein Array mit allen Zahlen haben, die eine gerade Anzahl von Wiederholungen wiederholen, mit einer Ausnahme, bei der eine ungerade Anzahl von Wiederholungen wiederholt wird, können Sie dies finden, indem Sie alle Elemente XORing.
  • Werte tauschen, ohne temporäre Variable zu verwenden
  • Suche nach fehlenden Nummern im Bereich von 1 bis n
  • Grundlegende Validierung der über das Netzwerk gesendeten Daten.

Viele solche Tricks können mit bitweisen Operatoren ausgeführt werden, ein interessantes Thema, das erforscht werden kann.

13
willsteel

XOR-Operatorregel =>

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1

Binäre Darstellung von 4, 5 und 6:

4 = 1 0 0 
5 = 1 0 1
6 = 1 1 0

führen Sie nun die Operation XOR für 5 und 4 aus: 

     5 ^ 4 => 1  0  1   (5)
              1  0  0   (4)
            ----------
              0  0  1   => 1

Ähnlich, 

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
10
Sachin Ambalkar

Der Operator Bitwise xor in Java führt dazu, dass 1 für verschiedene Bitwerte (dh 1 ^ 0 = 1) und 0 für denselben Bitwert (dh 0 ^ 0 = 0) angegeben wird, wenn eine Zahl binär geschrieben wird.

ex :- 

Um Ihr Beispiel zu verwenden:

Die Binärdarstellung von 5 ist 0101 ..__ Die Binärdarstellung von 4 ist 0100.

Bitwise XOR kann auf einfache Weise definiert werden, wenn das Ergebnis an jeder Stelle eine 1 hat, an der sich die beiden Eingangsnummern unterscheiden.

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

7
Nikhil Kumar
7
Luis

Wie bereits in den anderen Antworten angegeben, handelt es sich um den "Exclusive or" (XOR) -Operator . Weitere Informationen zu Bit-Operatoren in Java finden Sie unter: http://Java.Sun.com/docs/books/tutorial/Java/nutsandbolts/op3.html

7
Bart Kiers

Der Link von AraK verweist auf die Definition von exklusiv-or, was erklärt, wie diese Funktion für zwei boolesche Werte funktioniert.

Die fehlende Information ist, wie dies für zwei Ganzzahlen (oder Ganzzahlwerte) gilt. Bitweises Exklusiv-Oder wird auf Paare von entsprechenden Binärziffern in zwei Zahlen angewendet und die Ergebnisse werden zu einem ganzzahligen Ergebnis zusammengefügt.

Um Ihr Beispiel zu verwenden:

  • Die binäre Darstellung von 5 ist 0101.
  • Die binäre Darstellung von 4 ist 0100.

Eine einfache Methode zum bitweisen Definieren von XOR besteht darin, dass das Ergebnis an jeder Stelle eine 1 hat, an der sich die beiden Eingangsnummern unterscheiden.

Bei 4 und 5 ist der einzige Unterschied der letzte Platz. so

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

7
Carl Smotricz

Das liegt daran, dass Sie den Operator xor verwenden.

In Java oder jeder anderen Sprache ist ^ bitweise xor, So natürlich

10 ^ 1 = 11 . weitere Informationen zu bitweisen Operatoren

Es ist interessant, dass Java und C # keinen Power Operator haben.

6
jcao219

Es ist der bitweise Xor-Operator in Java, der 1 für verschiedene Werte (dh 1 ^ 0 = 1) und 0 für denselben Wert (dh 0 ^ 0 = 0) ergibt.

2
GuruKulki

Es ist der Operator XOR. Es wird verwendet, um Bitoperationen mit Zahlen auszuführen. Es hat das Verhalten, dass, wenn Sie eine Xor-Operation für dieselben Bits ausführen, 0 XOR 0/1 XOR 1 ist, ist das Ergebnis 0. Wenn sich jedoch eines der Bits unterscheidet, ist das Ergebnis 1.So wenn Sie 5 ^ 3 gemacht haben, können Sie diese Zahlen 5, 6 in ihren binären Formen betrachten und somit wird der Ausdruck zu (101) XOR (110), was das Ergebnis (011) ergibt, dessen Dezimalwert ist 3.

2
Yug Singh

^ ist binär (wie in base-2) xor, keine Potenzierung (die nicht als Java-Operator verfügbar ist). Informationen zur Exponentiation finden Sie unter Java.lang.Math.pow ().

2
Ming-Tang

XOR-Operatorregel

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1

Der bitweise Operator arbeitet mit Bits und führt bitweise Operationen durch. Angenommen, wenn a = 60 und b = 13 ist; jetzt im Binärformat werden sie wie folgt sein:

a = 0011 1100

b = 0000 1101



a^b ==> 0011 1100  (a)
        0000 1101  (b)
        -------------  XOR
        0011 0001  => 49

(a ^ b) will give 49 which is 0011 0001
0
Mayur Dabhi

In anderen Sprachen wie Python können Sie 10 ** 2 = 100 ausführen, probieren Sie es aus.

0
mkotechno