将整数右移一位,相当于将整数除以2,并向下取整
10>>1 ----> 5
9>>1 ----> 4
-10>>1 ----> -5
-9>>1 -----> -5
将整数左移一位,相当于将整数乘以2
9<<1 ----> 18
10<<1 ----> 20
-9<<1 -----> -18
-10<<1 -----> -20
作用:位运算相较于乘除运算,有着更高的计算效率, 同时将整数与1做与运算,若为0,则整数为偶数
算法:数值的整数次方
利用公式
a
n
=
{
a
n
/
2
∗
a
n
/
2
,
i
f
n
i
s
e
v
e
n
a
(
n
−
1
)
/
2
∗
a
(
n
−
1
)
/
2
∗
a
,
i
f
n
i
s
n
o
t
e
v
e
n
a^{^n}=\left\{\begin{matrix} & a^{n/2}*a^{n/2} , &if\ n\ is\ even\\\\ & a^{(n-1)/2}*a^{^{(n-1)/2}}*a, &if\ n\ is\ not\ even\\ \end{matrix}\right.
an=⎩⎨⎧an/2∗an/2,a(n−1)/2∗a(n−1)/2∗a,if n is evenif n is not even
可以实现O(lgn)时间复杂度,详见《剑指offer》
def powerWithExponent(base, exponent):
if exponent == 0:
return 1
if exponent == 1:
return base
if exponent == -1:
return 1/base
result = powerWithExponent(base, exponent>>1)
result *= result
if exponent & 1 == 1:
result *= base
return result