^总是被认为意味着取幂。但它并没有这样做。它究竟意味着什么,是否有任何Int成员函数进行取幂(除了math.pow)?
为什么这样定义?当所有其他语言赋予它最高优先级时,它的运算符优先级低于arithemetic操作。
答案 0 :(得分:22)
嗯,“所有其他语言”是一个非常强烈的声明。
Scala中的'^'来自Java(它来自C语言的一般附近),并且意味着按位异或。 并且它在各种其他语言中也被用作XOR,例如。在Python中。
答案 1 :(得分:20)
它是按位排他或。您可能从未使用C,C ++或Java开发过,或者...... 它是从它们继承而来的。我不知道如何定义它“应该”是什么,但肯定有一个很多的代码用这个含义编写。
Int(和RichInt)没有取幂运算符。
就优先级而言,它位于其他逻辑运算符的中间,它属于实际意义所属的位置(与指数相反)。
如果你真的想在限制范围内覆盖“^”的含义(我不推荐的话),我认为你可以使用隐式参数从而获得您想要的高优先级。或者,更加理智,我认为您可以以相同的方式定义“to_the”或“**”运算符,获得相同的高优先级。
答案 2 :(得分:0)
许多语言都有某种取幂运算符:R,Matlab,BASIC,LaTeX和UNIX的bc使用'3 ^ 2',Ada,COBOL,PL / I,Python和Fortran使用'3 ** 2'。< / p>
我已经看到它声称取幂是相对罕见的,但我会说在多年的编程中我从来不需要XOR而且已经很多年了,因为我需要任何类型的位操作 - - 可能回到他们以KB为单位测量RAM的日子。另一方面,我经常进行取词。
在我看来,如果我打算将Scala用作我的R,我可能会考虑这样的事情:
implicit class FixPow(x: Double) { def ~^(p: Double): Double = Math.pow(x, p) }
这有点难看,但确实比'*'具有更高的优先级,这就是所需要的。所以'3 * 2~ ^ 3'评估为24,正如预期的那样。
C对全套位操作的支持来自UNIX用C语言编写的事实。它基本上编写了汇编语言模式。