我很好奇一条python语句:
csum = (N * (N + 1)) >> 1
其中 N = 5
和 csum = 15
。我不明白运算符 >>>
以及此语句中发生的事情。此操作背后的幕后想法是什么? csum
应该是向量 1:5 的累加和。
感谢您对此的想法。
最佳答案
基于 Python wiki :
x >> y
Returnsx
with the bits shifted to the right byy
places. This is the same as //'ingx
by2**y
.
在你的语句中,python 首先计算 (N * (N + 1))
部分,然后在结果和数字 1 之间执行 >>>
操作:
In [4]: (N * (N + 1))
Out[4]: 30
In [5]: 30 >> 1
Out[5]: 15
好吧,为了更好的演示,您可以使用 bin()
函数简单地将整数转换为二进制:
In [6]: bin(30)
Out[6]: '0b11110'
现在将位右移 1,您将得到以下数字:
01111
现在使用 int()
和 2 作为基数将结果转换为整数:
In [11]: int('01111', 2)
Out[11]: 15
作为计算右移操作的另一种替代方法,您还可以使用 operator.rshift()
函数:
In [12]: from operator import rshift
In [13]: rshift(30, 1)
Out[13]: 15
阅读更多:https://en.wikipedia.org/wiki/Arithmetic_shift
正如 python wiki 和@eryksun 指出的那样,您还可以将右移操作视为将 30(左侧数字)除以 21(右侧数字),它将当您将数字转换为 2 次幂的系数时更容易解释。
bin(30)
等于 11110
即:
1*24 + 1*23 + 1*22 + 1*21 + 0*20
除以 2 你会得到:
1*23 + 1*22 + 1*21 + 1*20 + 0 = 8 + 4 + 2 + 1 = 15
关于python - 围绕按位运算符语句的讨论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43650548/