我对python语句感到好奇:
csum = (N * (N + 1)) >> 1
其中N = 5
和csum = 15
。我不理解运算符>>
以及本声明中发生了什么。这个行动背后的底层思想是什么? csum
应该是向量1:5的累积和。
欣赏你对此的看法。
答案 0 :(得分:5)
基于Python wiki:
x >> y
返回x
,其位数向右移动y
个位置。这个 与x
的{{1}}相同。
在你的语句中,python首先计算2**y
部分,然后在结果和数字1之间执行(N * (N + 1))
操作:
>>
好吧,为了更好的演示,你可以使用In [4]: (N * (N + 1))
Out[4]: 30
In [5]: 30 >> 1
Out[5]: 15
函数简单地将整数转换为二进制:
bin()
现在将位向右移1,您将得到以下数字:
In [6]: bin(30)
Out[6]: '0b11110'
现在使用01111
和2作为基数将结果转换为整数:
int()
作为计算右移操作的另一种替代方法,您还可以使用In [11]: int('01111', 2)
Out[11]: 15
函数:
operator.rshift()
了解详情:https://en.wikipedia.org/wiki/Arithmetic_shift
正如python wiki和@eryksun所指出的那样,您也可以考虑将右移操作划分为将30(左侧数字)除以2 1(右侧数字)将数字转换为2个幂的系数时,更容易理解。
In [12]: from operator import rshift
In [13]: rshift(30, 1)
Out[13]: 15
等于bin(30)
,即:
1 * 2 4 + 1 * 2 3 + 1 * 2 2 + 1 * 2 1 + 0 * 2 0
通过2分,你会得到:
1 * 2 3 + 1 * 2 2 + 1 * 2 1 + 1 * 2 0 + 0 = 8 + 4 + 2 + 1 = 15
答案 1 :(得分:3)
运算符>>
是右移,在这种情况下是1.它大致等于整数除以2 ^ N,所以在这种情况下除以2 ^ 1(例如2)。所以:
csum = (N * (N + 1)) >> 1
其中N = 5
,5 * 6 / 2
等于15。
其中给出了基于一个增量向量的累积和,例如1:5