Java'daki ^ işleci
^
Java'da münhasır veya ("xor") operatörüdür.
En alalım 5^6
örnek olarak:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Bu bitsel ( JLS 15.22.1 ) ve mantıksal ( JLS 15.22.2 ) xor için doğruluk tablosu :
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Daha basit olarak, xor'u "şu ya da bu, ama her ikisi de değil !" Olarak düşünebilirsiniz .
Ayrıca bakınız
Java'da Üstelleştirme
Tamsayı üssüne gelince, maalesef Java'nın böyle bir operatörü yoktur. Kullanabilirsiniz double Math.pow(double, double)
( int
gerekirse sonucu döküm ).
Ayrıca, ikisinin bazı güçlerini hesaplamak için geleneksel bit kaydırma hilesini de kullanabilirsiniz. Yani, k- gücünün (1L << k)
ikisidir .k=0..63
Ayrıca bakınız
Birleştirme notu : Bu yanıt niyeti bir dize dönüştürmek için üs kullanmaktı başka sorudan birleştirilmiştir"8675309"
içinint
kullanmadanInteger.parseInt
(bir programlama egzersiz olarak^
şu andan itibaren O anlamına gelir üs). OP'nin amacı hesaplamaktı8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; bu cevabın bir sonraki kısmı, bu görev için üslemenin gerekli olmadığını ele almaktadır.
Horner'ın şeması
Senin seslenen belirli ihtiyacı, aslında sen ne denir kullanabilirsiniz 10 farklı güçler hesaplamak gerekmez Horner düzeni basit ama aynı zamanda verimli değil sadece.
Bunu kişisel bir egzersiz olarak yaptığınızdan, Java kodunu vermeyeceğim, ancak asıl fikir:
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
İlk başta karmaşık görünebilir, ama gerçekten değil. Temel olarak soldan sağa rakamları okursunuz ve bir sonraki rakamı eklemeden önce sonucunuzu şimdiye kadar 10 ile çarpıyorsunuz.
Tablo formunda:
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