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
必要に応じて結果をキャストします)。
従来のビットシフトトリックを使用して、2のべき乗を計算することもできます。つまり、の(1L << k)
2のk乗ですk=0..63
。
こちらもご覧ください
マージノート:この回答は、指数関数を使用して文字列"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