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 "dies oder das, aber nicht beides !" Vorstellen .
Siehe auch
Potenzierung in Java
Was die ganzzahlige Potenzierung betrifft, hat Java leider keinen solchen Operator. Sie können verwenden double Math.pow(double, double)
(Casting des Ergebnisses aufint
bei Bedarf auf).
Sie können auch den traditionellen Bitverschiebungstrick verwenden, um einige Zweierpotenzen zu berechnen. Das heißt, (1L << k)
ist zwei zur k- ten Potenz für k=0..63
.
Siehe auch
Hinweis zum Zusammenführen : Diese Antwort wurde aus einer anderen Frage zusammengeführt, bei der die Exponentiation zum Konvertieren eines Strings"8675309"
in verwendet werden sollteint
ohne sie Integer.parseInt
als Programmierübung zu verwenden ( ^
bezeichnet Exponentiation von nun an). Die Absicht des OP war es zu berechnen 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; Der nächste Teil dieser Antwort befasst sich damit, dass für diese Aufgabe keine Potenzierung erforderlich ist.
Horners Schema
Um Ihren spezifischen Anforderungen gerecht zu werden, müssen Sie tatsächlich keine 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 durchführen, werde ich den Java-Code nicht angeben, 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 zunächst kompliziert aussehen, ist es aber wirklich nicht. Grundsätzlich lesen Sie 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