2012-07-13 68 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