2012-07-13 88 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^i推出了decent patterns2^i & 4^i只是與各地沒有明顯的圖案的地方(儘管可能性很小)只有11點繪製的,所以我來找你的女士們,男士問你:

究竟是什麼

用於^

+0

我想這是異或運算符。 – Gumbo 2012-07-13 05:57:25

+1

有時我沒有得到SO社區。爲什麼這個愚蠢的http://stackoverflow.com/questions/11464250/using-in-ruby問題有+2 upvotes,而這一個繼續得到downvotes? – ted 2012-07-13 06:09:42

+0

@問題由於缺乏研究,未包含足夠的信息或難以理解而被低估。這是前者的一個例子,因爲快速的網絡搜索「caret operator ruby​​」會回答這個問題(不會出現堆棧溢出問題)。 – coreyward 2012-07-13 18:32:17

回答

18

在大多數編程語言,^是XOR運算符(Exclusive Or in Wikipedia)。 XOR是CPU中最重要的操作之一,它通常用於零寄存器(考慮a ^= a),因爲它速度快並且操作碼較短。

對於電源功能,您必須使用例如**(例如紅寶石),java.lang.Math.powmath.powpow

事實上,我無法說出使用^一種編程語言。它在LaTeX中用於格式化(在技術上作爲上標,而不是電源功能)。但是我一直看到的兩個變體是**(因爲功率函數與乘法直接相關)和pow(base, exp)

請注意,您可以使用位移更快地計算2的整數冪。

+4

如果您要回答Ruby問題,那麼給Ruby語法可能是謹慎的,而不是Java等人 - 對於記錄來說,Ruby中的指數運算符是'**'。 – coreyward 2012-07-13 06:02:42

+0

前段時間我只用過一次Ruby。這種行爲是XOR顯而易見的。謝謝,我會補充一點。 – 2012-07-13 06:04:30

+1

'3 << 4極其快,比3 ** 16'快你檢查過嗎?我認爲像python和ruby這樣的腳本語言實現了二進制乘法/供電; – ted 2012-07-13 06:13:45