私は2 << 5
を取得して64および1000 >> 2
250を取得します。
また、>>
in print
:
print >>obj, "Hello world"
ここで何が起きてるの?
これらはビット単位のシフト演算子です。
docs からの引用:
x << y
x
を、ビットをy桁左にシフトした状態で返します(右側の新しいビットはゼロです)。これは、x
に2**y
を掛けることと同じです。
x >> y
ビットをy桁右にシフトしたx
を返します。これは、x
を2**y
で除算するのと同じです。
私はそれが重要な質問であり、まだ答えられていないと思います(OPはすでにシフト演算子について知っているようです)。答えてみましょう。例の>>演算子は2つの異なる目的に使用されます。 C++の用語では、この演算子はオーバーロードされています。最初の例では、ビット演算子(左シフト)として使用されますが、2番目のシナリオでは、単に出力のリダイレクトとして使用されます。つまり.
2 << 5 # shift to left by 5 bits
2 >> 5 # shift to right by 5 bits
print >> obj, "Hello world" # redirect the output to obj,
with open('foo.txt', 'w') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
python 3では、次のようにファイル引数を直接指定できます。
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
_print >>obj, "Hello World"
_が関係するもう1つのケースは、print
statement in Python 2(removed in Python 3、print()
function )のfile
引数に置き換えられます。標準出力に書き込む代わりに、出力はobj.write()
メソッドに渡されます。典型的な例は、write()
メソッドを持つファイルオブジェクトです。最近の質問への回答を参照してください: Double greater- Pythonのより記号 。
12 << 2
48
上記のステートメントを実行すると、12の実際のバイナリ値は「00 1100」です。左シフト(2桁左にシフト)は、そのバイナリ値が「11 0000」である値48を返します。
48 >> 2
12
48のバイナリ値は「11 0000」です。上記のステートメントを実行すると、右シフト(2桁右にシフト)の値12が返され、そのバイナリ値は「00 1100」になります。
これらは シフト演算子 です
x << y xを、ビットをy位置だけ左にシフトした状態で返します(右側の新しいビットはゼロです)。これは、xに2 ** yを乗算するのと同じです。
x >> yビットをy桁右にシフトしたxを返します。これは、xを2 ** yで// //することと同じです。
これらは、多くの主流のプログラミング言語に存在するビットシフト演算子です。<<
は左シフトで、>>
は右シフトです。次の表に示すように、整数はメモリ内で1バイトのみをとると仮定します。
| operate | bit value | octal value | description |
| ------- | --------- | ----------- | -------------------------------------------------------- |
| | 00000100 | 4 | |
| 4 << 2 | 00010000 | 16 | move all bits to left 2 bits, filled with 0 at the right |
| 16 >> 2 | 00000100 | 4 | move all bits to right 2 bits, filled with 0 at the left |