^ Operator di Jawa
^
di Jawa adalah operator eksklusif-atau ("xor").
Mari kita ambil 5^6
contoh:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Ini tabel kebenaran untuk bitwise ( JLS 15.22.1 ) dan logis ( JLS 15.22.2 ) xor:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Lebih sederhana, Anda juga dapat menganggap xor sebagai "ini atau itu, tetapi tidak keduanya !".
Lihat juga
Eksponen di Jawa
Sedangkan untuk exponentiation integer, sayangnya Java tidak memiliki operator seperti itu. Kamu bisa memakaidouble Math.pow(double, double)
(casting hasilnya int
jika perlu).
Anda juga dapat menggunakan trik pergeseran bit tradisional untuk menghitung beberapa kekuatan dua. Artinya, (1L << k)
dua ke k pangkat -th untuk k=0..63
.
Lihat juga
Gabung catatan : jawaban ini digabungkan dari pertanyaan lain di mana tujuannya adalah menggunakan eksponensial untuk mengubah string"8675309"
menjadiint
tanpa menggunakanInteger.parseInt
sebagai latihan pemrograman (^
menunjukkan eksponensial mulai sekarang). Niat OP adalah untuk menghitung8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; bagian selanjutnya dari jawaban ini membahas bahwa eksponensial tidak diperlukan untuk tugas ini.
Skema Horner
Mengatasi kebutuhan spesifik Anda, Anda sebenarnya tidak perlu menghitung berbagai kekuatan 10. Anda dapat menggunakan apa yang disebut skema Horner , yang tidak hanya sederhana tetapi juga efisien.
Karena Anda melakukan ini sebagai latihan pribadi, saya tidak akan memberikan kode Java, tapi inilah ide utamanya:
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
Pada awalnya mungkin terlihat rumit, tetapi sebenarnya tidak. Anda pada dasarnya membaca angka dari kiri ke kanan, dan Anda mengalikan hasilnya sejauh ini dengan 10 sebelum menambahkan angka berikutnya.
Dalam bentuk tabel:
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