^
в 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 не имеет такого оператора. Вы можете использовать double Math.pow(double, double)
(при необходимости приведя результат к int
).
Вы также можете использовать традиционный трюк для смещения бит для вычисления нескольких степеней по два. То есть (1L << k)
равно двум k -й степени для k=0..63
.
Объединить примечание : этот ответ был объединен с другим вопросом, в котором было намерение использовать экспоненциальность для преобразования string
blockquote>"8675309"
-int
, не используяInteger.parseInt
в качестве упражнения программирования (^
теперь означает возведение в степень). Целью OP было вычислить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
Свойства startPoint
и endPoint
для CAGradientLayer
определены в «единичной системе координат». В системе единиц измерения:
(0,0)
соответствуют наименьшим координатам прямоугольника границ слоя, который в iOS является его верхним левым углом, если слой не был преобразован; (1,1)
соответствует наибольшим координатам прямоугольника границ слоя, который в iOS является его правым нижним углом, если слой не был преобразован. Таким образом, расположение градиента должно быть таким простым:
gradient.startPoint = CGPoint.zero
gradient.endPoint = CGPoint(x: 1, y: 1)