Оператор ^ в Java
^
в Java это оператор с исключительным или ("xor").
Давайте возьмем в 5^6
качестве примера:
(decimal) (binary)
5 = 101
6 = 110
------------------ xor
3 = 011
Это таблица истинности для побитового ( JLS 15.22.1 ) и логического ( JLS 15.22.2 ) xor:
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
Проще говоря, вы также можете думать о xor как о «том или ином, но не обоем !».
Смотрите также
Экспонирование в Java
Что касается целочисленного возведения в степень, то, к сожалению, в Java такого оператора нет. Вы можете использовать double Math.pow(double, double)
(приведение результата к int
необходимости).
Вы также можете использовать традиционный трюк со сдвигом битов для вычисления некоторых степеней двойки. То есть (1L << k)
это два к k-й степени для k=0..63
.
Смотрите также
Примечание о слиянии: этот ответ был объединен с другим вопросом, в котором предполагалось использовать возведение в степень для преобразования строки"8675309"
вint
без использованияInteger.parseInt
в качестве упражнения по программированию (^
обозначает возведение в степень теперь). Намерением ФП было вычислить8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309
; Следующая часть этого ответа посвящена тому, что возведение в степень не является необходимым для этой задачи.
Схема Хорнера
Для удовлетворения ваших конкретных потребностей вам не нужно вычислять различные степени 10. Вы можете использовать так называемую схему Хорнера , которая не только проста, но и эффективна.
Поскольку вы делаете это как личное упражнение, я не буду давать код Java, но вот основная идея:
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
Сначала это может показаться сложным, но на самом деле это не так. Вы в основном читаете цифры слева направо, и вы умножаете свой результат до 10, прежде чем добавить следующую цифру.
В форме таблицы:
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