2011-12-27 54 views
0

這是令人困惑行:x_next = (x_next + (a // x_prev)) >> 1的Python 3 - 什麼是 「>>」

+0

的可能重複[?爲什麼3 << 1 == 6蟒蛇(http://stackoverflow.com/questions/3917948/why-is- 31-6-in-python) – paddy 2013-02-17 22:15:53

回答

4

這是按位轉換。接下來會給你一些直覺:

>>> 16 >> 1 
8 
>>> 16 >> 2 
4 
>>> 16 >> 3 
2 
>>> bin(16) 
'0b10000' 
>>> bin(16 >> 1) 
'0b1000' 
>>> bin(16 >> 2) 
'0b100' 
1

這是right shift operator

這被用來除以2它會更清楚它寫成

x_next = (x_next + (a // x_prev)) // 2 

可悲的是,很多人試圖要高明和到位乘法和除法的使用移位運算符。通常情況下,這會給那些需要在以後閱讀代碼的可憐人帶來很多困惑。

1

>>運營商是同一運營商,因爲它是在C和許多其他語言。

向右移位。如果你的號碼是這樣的二進制:0100比它將0010>> 1。與>> 2它將是0001

所以基本上它除以2你的電話號碼(而地板的餘數)的好辦法;)

+0

從什麼意義上說,這是一個用2除的好方法?除以2的好方法是編寫'x // 2'。 – 2011-12-27 15:52:55

+0

是的,但我懷疑在Python中這是一個「好」的方法來分割數字'2' :)有'/'操作符。 – Tadeck 2011-12-27 15:54:14

+0

@DavidHeffernan:我完全同意這是**不是**一個很好的方法來將分割數除以2. – Tadeck 2011-12-27 15:57:00

0

這意味着「右移」。它的工作原理一樣地板除以2

>>> a = 7 
>>> a >> 1 
3 
>>> a // 2 
3