I was thinking of making an integer power function in Swift based on this StackOverflow answer:
func **<T : IntegerType>(var base: T, var exponent: T) -> T {
var result: T = 1
assert(exponent >= 0, "Exponent cannot be negative")
while exponent > 0 {
if exponent & 1 != 0 {
result *= base
}
exponent = exponent >> 1
base *= base
}
return result
}
I figured I could use generics to implement the function so that it would work with any integer type.
Unfortunately, I get an error when I attempt to use exponent >> 1
:
Binary operator '>>' cannot be applied to two 'T' operands
Checking the function definitions for >>
, I see that there is one for each of the ten integer types, but no other ones are defined. I was surprised therefore that all the other operators were working, such as &
, but I noticed that &
was actually defined to work on all types which conform to BitwiseOperationsType
, which IntegerType
appears to conform to.
Is there a reason why the >>
and <<
operators are not implemented for BitwiseOperationsType
?