Java の ^ 演算子は何をしますか? 質問する

Java の ^ 演算子は何をしますか? 質問する

^Java では (キャレット) 演算子はどのような機能を果たしますか?

これを試すと:

int a = 5^n;

...それは私に次のことを与えます:

n = 5 の場合は 0 を返し、
n = 4 の場合は 1 を返し、
n = 6 の場合は 3 を返します。

...だから、累乗は実行されないと思います。しかし、それは何でしょうか?

ベストアンサー1

Javaの^演算子

^Java では、排他的論理和 ("xor") 演算子です。

例を見てみましょう5^6:

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011

これはビット単位の真理値表です(JLS15.22.1) と論理 (JLS15.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 の累乗を計算することもできます。つまり、は の2 のk(1L << k)乗です。k=0..63

参照


マージメモ: この回答は、プログラミング演習として を使用せずに指数関数を使用して文字列"8675309"を にはこれ以降、指数関数を表します)。 OP の意図は を計算することでした。この回答の次の部分では、このタスクには指数関数は必要ないことを説明しています。intInteger.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

おすすめ記事