我没有在Swift语言参考的基本算术运算符中看到定义的幂运算符。
语言中真的没有预定义的整数或浮点运算符吗?
我没有在Swift语言参考的基本算术运算符中看到定义的幂运算符。
语言中真的没有预定义的整数或浮点运算符吗?
Answers:
没有操作员,但是您可以使用pow函数,如下所示:
return pow(num, power)
如果愿意,还可以让操作员像这样调用pow函数:
infix operator ** { associativity left precedence 170 }
func ** (num: Double, power: Double) -> Double{
    return pow(num, power)
}
2.0**2.0 //4.0
    **,因此您可以在整数上使用它,而不会与XOR冲突。
                    -2.0**2.0 = -(2.0**2.0) = -4.0。但是,这里-2.0**2.0 = (-2.0)**2.0 = 4.0可能不是预期的用途,并且可能导致非常讨厌且难以跟踪的错误。
                    <<和>>。不同的优先级将导致不同的代码解释,因此,标准化通用运算符的优先级非常重要。我不知道最好的标准是什么,但给人<< 2和** 2相同的优先级有一定的道理。  nshipster.com/swift-operators
                    如果碰巧将2提高到一定的幂,则可以使用按位左移运算符:
let x = 2 << 0    // 2
let y = 2 << 1    // 4
let z = 2 << 7    // 256
注意,“ power”值比您想象的小1。
请注意,这比执行速度更快,pow(2.0, 8.0)并且可以避免使用双精度。
let x = 0b00000001 << exponent // 2**exponent   let x = 1 << 0   // 1   let x = 1 << 2   // 4   let x = 1 << 8   // 256
                    对于正在寻找Swift 3版本的用户 **infix运算符的用户:
precedencegroup ExponentiationPrecedence {
  associativity: right
  higherThan: MultiplicationPrecedence
}
infix operator ** : ExponentiationPrecedence
func ** (_ base: Double, _ exp: Double) -> Double {
  return pow(base, exp)
}
func ** (_ base: Float, _ exp: Float) -> Float {
  return pow(base, exp)
}
2.0 ** 3.0 ** 2.0    // 512
(2.0 ** 3.0) ** 2.0  // 64
    import Darwin得到pow
                    如果您对Int类型的幂运算符特别感兴趣,我认为由于内存中浮点数的表示方式,现有答案对于大数不会特别有效。当转换到Float或Double从Int,然后返回(这是由需要pow,powf和powl功能Darwin模块)可能会丢失精度。这是用于的精确版本Int:
let pow = { Array(repeating: $0, count: $1).reduce(1, *) }
请注意,此版本的内存使用效率不是特别高,并且已针对源代码大小进行了优化。
不会创建中间数组的另一个版本:
func pow(_ x: Int, _ y: Int) -> Int {
  var result = 1
  for i in 0..<y {
    result *= x
  }
  return result
}
    一个替代的答案是使用NSExpression
let mathExpression = NSExpression(format:"2.5**2.5")
let answer = mathExpression.expressionValue(with: nil, context: nil) as? Double
要么
let mathExpression = NSExpression(format:"2**3")
let answer = mathExpression.expressionValue(with: nil, context: nil) as? Int