2011-12-27 3 views

答えて

4

ビットシフトです。次はあなたにいくつかの直感を与える:それはCや他の多くの言語であるよう

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

ここでは、賢いことをしようとすると、乗算と除算の代わりにシフト演算子を使用することは悲しいこと

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

として多くの人々がこれを書くためにはるかに明らかである2で分割するために使用されています。一般的に、これは後でコードを読まなければならない貧しい人々のための多くの混乱につながります。

1

>>オペレータは、同じ演算子です。

右にビットシフトします。あなたの番号がバイナリで次のようなものなら、>> 1の後には0010になるよりも0100より大きいでしょう。 >> 2の場合は0001となります。

(残りフローリングながら)だから、基本的には2で、あなたの数を分割するための良い方法です;)

+0

これは2で割り切れるいい意味ですか? 2で割る良い方法は、 'x // 2'と書くことです。 –

+0

はい、しかし、私はPythonでこれが "2"で数を分割する "素敵な"方法であるとは思っていません:)そのための '//'演算子があります。 – Tadeck

+0

@DavidHeffernan:これは私が完全に同意します**私は階数を2で割る良い方法ではありません。 – Tadeck

0

それは「右シフト」を意味します。これは2によって床分割と同じ動作:

>>> a = 7 
>>> a >> 1 
3 
>>> a // 2 
3 
関連する問題