2012-07-13 5 views
6

可能性の重複:
Use of caret symbol(^) in 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 

wth!だから、私は4^iに行ってプロットして、1^i & 3^idecent patternsだが、2^i & 4^iはちょうど11個のプロット点で目に見えるパターンが見えない場所だったので、私はあなたに来た。あなたに尋ねる紳士:

何が^のために使用されますか?

+0

私はそれがXOR演算子だと思います。 – Gumbo

+1

時には私はSOコミュニティを取得できません。なぜそれは愚かなhttp://stackoverflow.com/questions/11464250/using-in-ruby質問は、これはdownvotesを取得し続けている間、+2 upvotesを得たか? – ted

+0

@ted質問は十分に調査されていないか、十分な情報が含まれていない、または理解が難しいという理由で下降してしまいます。これは前者の場合です。なぜなら、「キャレット演算子ルビ」のWeb検索が問題に答えてくれるからです(スタックオーバーフローの問題はありません)。 – coreyward

答えて

18

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

パワー機能については、たとえば、 **(例えばルビーで)など、java.lang.Math.powmath.powpow

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

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

+4

Rubyの質問に答えるつもりなら、Rubyの構文を与えるのは賢明かもしれません.Javaらではなく、Rubyでの指数演算子のレコードは '**'です。 – coreyward

+0

私はRubyを一度しか使用していません。その行動がXORであることは明らかであった。ありがとう、私はこれを追加します。 –

+1

'3 << 4は非常に速く、3 ** 16よりはるかに高速です。これをチェックしましたか?私は、PythonやRubyのようなスクリプト言語は、2進の乗算/動力化を実装すると仮定します。 – ted

関連する問題