9

重複の可能性:
Ruby でのキャレット記号 ( ^ ) の使用

それで、私はいくつかのコードをいじっていて、べき乗演算子をいじってみました。だから私はおそらく^この目的のためにキャレット()を使うことができると思ったが、それを使った後:

for i in 0..10
  puts "#{i}   #{1^i}\n"
end

私はいくつかの本当にファンキーな結果を得ました

0   -  1
1   -  0
2   -  3
3   -  2
4   -  5
5   -  4
6   -  7
7   -  6
8   -  9
9   -  8
10  -  11

私が見る唯一のパターンは、奇数で-1、偶数で+1ですが、試してみると:

for i in 0..10
  puts "#{i}   #{2^i}\n"
end

私は得る:

0   -  2
1   -  3
2   -  0
3   -  1
4   -  6
5   -  7
6   -  4
7   -  5
8   -  10
9   -  11
10  -  8

と!それで、私は4^iそれらをプロットし続け、まともなパターン1^i & 3^i出てきましたが、わずか11個のプロットポイントで目に見えるパターンがなく(可能性は非常に低いですが)いたるところにありました。あなた:2^i & 4^i

一体何に^使われているの!?

4

1 に答える 1

28

ほとんどのプログラミング言語で^は、 XOR 演算子 ( Wikipedia では Exclusive Or ) です。XOR は、CPU で最も重要な操作の 1 つですa ^= a。高速で短いオペコードを持つため、レジスタをゼロにすることがよくあります (たとえば、XOR を考えてください)。

累乗関数については、たとえば**(たとえばルビーで)、、、java.lang.Math.powなどをmath.pow使用する必要があります。pow

実際、私は を使用するプログラミング言語に名前を付けることができませんでした^。LaTeX で書式設定に使用されます (技術的にはべき乗関数ではなく、上付き文字として)。しかし、私がいつも目にする 2 つの変種は**(累乗関数が乗算に直接関係しているため) とpow(base, exp)です。

シフトを使用すると、整数の 2 乗を高速に計算できることに注意してください。

于 2012-07-13T06:01:14.290 に答える