L'operatore ^ in Java
^
in Java è l'operatore esclusivo o ("xor").
Prendiamo 5^6
come esempio:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Questa è la tabella di verità per bitwise ( JLS 15.22.1 ) e logica ( JLS 15.22.2 ) xor:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Più semplicemente, puoi anche pensare a xor come "questo o quello, ma non entrambi !".
Guarda anche
Esponenziazione in Java
Per quanto riguarda l'esponenziazione dei numeri interi, purtroppo Java non ha un tale operatore. È possibile utilizzare double Math.pow(double, double)
(trasmettere il risultato a int
se necessario).
Puoi anche usare il tradizionale trucco di spostamento dei bit per calcolare alcuni poteri di due. Cioè, (1L << k)
è due per la k -esima potenza k=0..63
.
Guarda anche
Merge Nota : questa risposta è stata incorporata da un'altra domanda in cui l'intenzione era di utilizzare elevamento a potenza per convertire una stringa"8675309"
diint
senza utilizzareInteger.parseInt
come un esercizio di programmazione (^
denota elevamento a potenza d'ora in poi). L'intenzione del PO era di calcolare8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; la parte successiva di questa risposta affronta che l'espiazione non è necessaria per questo compito.
Schema di Horner
Affrontando le tue esigenze specifiche , in realtà non è necessario calcolare vari poteri di 10. Puoi usare quello che viene chiamato lo schema di Horner , che non è solo semplice ma anche efficiente.
Dal momento che lo stai facendo come un esercizio personale, non darò il codice Java, ma ecco l'idea 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
All'inizio può sembrare complicato, ma in realtà non lo è. In pratica leggi le cifre da sinistra a destra e moltiplica il risultato finora per 10 prima di aggiungere la cifra successiva.
In forma di tabella:
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