Operator ^ w Javie
^
w Javie jest operatorem wyłącznym lub („xor”).
Weźmy 5^6
jako przykład:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Ta tabela prawdy dla bitowego ( JLS 15.22.1 ) i logicznego ( JLS 15.22.2 ) xor:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Mówiąc prościej, możesz również myśleć o xor jako „tym czy innym, ale nie obu !”.
Zobacz też
Potęgowanie w Javie
Jeśli chodzi o potęgowanie liczb całkowitych, niestety Java nie ma takiego operatora. Możesz użyć double Math.pow(double, double)
(rzutując wynik na, int
jeśli to konieczne).
Możesz także użyć tradycyjnej sztuczki polegającej na przesuwaniu bitów, aby obliczyć niektóre potęgi dwóch. Oznacza to, że (1L << k)
wynosi dwa do k- tej potęgi dla k=0..63
.
Zobacz też
Merge uwaga : ta odpowiedź została połączona z innym pytaniem gdzie intencją było wykorzystanie potęgowanie przekonwertować ciąg"8675309"
abyint
bez użyciaInteger.parseInt
jako programowanie ćwiczeń (^
oznacza potęgowanie od teraz). Zamiarem PO było obliczenie8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; kolejna część tej odpowiedzi dotyczy tego, że potęgowanie nie jest konieczne do wykonania tego zadania.
Schemat Hornera
Wychodząc naprzeciw konkretnym potrzebom, tak naprawdę nie musisz obliczać różnych mocy 10. Możesz użyć tak zwanego schematu Hornera , który jest nie tylko prosty, ale również wydajny.
Ponieważ robisz to jako ćwiczenie osobiste, nie podam kodu Java, ale oto główna idea:
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
Na początku może wydawać się skomplikowane, ale tak naprawdę nie jest. Zasadniczo czytasz cyfry od lewej do prawej i zwielokrotniasz dotychczasowy wynik przez 10 przed dodaniem kolejnej cyfry.
W formie tabeli:
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