Оператор ^ на 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