2014-06-05 2 views
45

Swift 언어 참조의 기본 산술 연산자에 정의 된 지수 연산이 표시되지 않습니다.Swift의 지수화 연산자

실제로 언어에 미리 정의 된 정수 또는 부동 소수점 연산이 있습니까?

답변

1

대부분의 C 계열 언어와 마찬가지로, 하나도 없습니다.

2

하나가 아니지만 pow 기능이 있습니다.

56

이 운영자가 아니지만이 같은 펑 기능을 사용할 수 있습니다 :

return pow(num, power) 

당신은, 당신은 또한 운영자 호출과 같이 펑 기능을 만들 수있는하려면 :

infix operator ** { associativity left precedence 170 } 

func ** (num: Double, power: Double) -> Double{ 
    return pow(num, power) 
} 

2.0**2.0 //4.0 
+0

더 나은는'사용하기. – Kevin

+2

^연산자는 Swift에서 XOR로 정의됩니다. –

+14

경고! 여기에 문제가 있습니다. 예를 들어, 보통 프로그래밍 언어에서는'-2.0 ** 2.0 = - (2.0 ** 2.0) = -4.0'입니다. 그러나, 여기'-2.0 ** 2.0 = (-2.0) ** 2.0 = 4.0'이 의도 된 용도가 아니며 버그를 추적하기 힘들고 어렵게 만들 수 있습니다. –

6

내가 해냈어과 같이 :

operator infix ** { associativity left precedence 200 } 

func ** (base: Double, power: Double) -> Double { 
    return exp(log(base) * power) 
} 
12

일부 전원에 2를 제기 할 일이 있다면, 당신은 비트 왼쪽 시프트 연산자를 사용할 수 :

let x = 2 << 0 // 2 
let y = 2 << 1 // 4 
let z = 2 << 7 // 256 

'power'값이 1보다 적을 수 있습니다.

이 값은 pow(2.0, 8.0)보다 빠르며 두 배 사용을 피할 수 있습니다. ** 중위 연산자의 스위프트 3 버전을 찾고있는 사람들을위한

+1

이것은 가능한 한 훌륭하지만 질문에 실제로 대답하지 않습니다. – Chris

+1

나는 2의 힘에 관심이 있었기 때문에 그것은 나를 위해 대답했다. – dldnh

+0

@chanceoperation 또는 2의 n 승을 위해 1 또는 0b00000001을 n 개의 자리로 왼쪽으로 이동할 수 있습니다. [Swift Advanced Operators] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual /Swift_Programming_Language/AdvancedOperators.html) '하게 X = 0b00000001 지수 << // 2 ** 지수 하자 X = 1 << // 0 1 X = 1 << 2 // 4 가합시다 X = 1 << 8 // 256' – beepscore

9

: 당신의 int에 그것을 사용하고 XOR과 충돌 할 수 **`, 그래서

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 
+4

니스. 'pow '을 얻기 위해'다윈'을 가져 오는 것을 잊지 마세요. – iainH

+1

확실히 결합 성을 남겨 두어야합니다. 2^3^2는 512가 아니라 64입니다. – brandonscript