繁体   English   中英

python中(**)和(<<)之间的区别是什么?

[英]what is difference between (**) and (<<) in python?

a = 100000000
c = (2**(a-1))-1
b = (2<<(a-1))-1
m = 1000000007
print b%m
print c%m

输出:

494499947
247249973

我在python中使用**和<<运算符来查找非常大的2的幂。 但是,类似的操作会产生不同 只是好奇为什么?

结果是不同的,因为2 ** n1 << n ,而不是2 << n

**是指数运算符。 <<向左移位。

由于二进制数的性质,左边的步进位移使数字加倍。 因此,您可以将2的相同操作表示为电源数减去1:

>>> 1 << 1  # 00000001 becomes 0000010
2
>>> 1 << 2  # 00000001 becomes 0000100
4
>>> 1 << 15 # 000000000000001 becomes 1000000000000000
32768

指数运算符用于生成多于2的指数,但是:

>>> 3 ** 3
27

但请注意, 2 ** 1仍为2,但向左移动一次( 2 << 1 )相当于2 ** 2

>>> 2 ** 1
2
>>> 2 << 1
4

2 ** 4 = 2 ^ 4 = 2 * 2 * 2 * 2

>>> 2**4 
16

2 << 4 =左移4位:移位前,2是二进制10; 移位后,2是二进制的100000

>>> 2<<4 
32

<<运算符表示左移。 虽然它可用于计算它,但它与2的幂不同。

举个例子:

0b10101 << 1 ==> 0b101010
0b1000  >> 1 ==> 0b100
0b10    << 2 ==> 0b1000

要使用左移操作来计算2的幂,您可以定义如下函数:

def poweroftwo(x):
    return 1 << x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM