シフト演算子

広告

シフト演算子はビット演算子の一つで整数の各ビットを左又は右へシフトさせるための演算子です。

演算子記述例意味
<<a << b左シフト
>>a >> b右シフト

ビット演算子と同じく対象の値を2進数のビットとして考え、ビットを左又は右へシフトさせます。なお2進数において左へ1つビットをシフトさせることは値を2倍することに相当し、右へ1つビットをシフトさせることは値を1/2にすることに相当します。

ではそれぞれの演算子について確認してみます。

左シフト

左シフト演算子は左辺の数値を右辺の値だけ左へシフトします。

a << b

例として11を1ビット左へシフトさせてみます。

0000000000001011 = 11
-----------------------
0000000000010110 = 22

各ビットを指定した数だけ左へシフトします。左端からはみ出した部分は削除され、シフトしたことによって空いた右端は「0」が格納されます。結果として11を1ビット左へシフトすると22となります。

print 11 << 1    # 22

上記では結果として「22」が出力されます。

右シフト

右シフト演算子は左辺の数値を右辺の値だけ右へシフトします。

a >> b

例として11を1ビット右へシフトさせてみます。

0000000000001011 = 11
-----------------------
0000000000000101 = 5

各ビットを指定した数だけ右へシフトします。右端からはみ出した部分は削除され、シフトしたことによって空いた左端には、元々の値が「1」だった場合は「1」が格納され、「0」だった場合は「0」が格納されます。数値の符号はそのままということです。

print 11 >> 1    # 5

上記では結果として「5」が出力されます。

今度は負の数である「-10」を1ビット右へシフトさせてみます。

1111111111110110 = -10
-----------------------
1111111111111011 = -5

負の数を右シフトする場合は、左側に「1」がずっと並んでいるものと考えて下さい。シフトした分だけ左側には「1」が格納されますので符号は変わりがありません。

print -10 >> 1    # -5

上記では結果として「-5」が出力されます。

サンプルコード

では実際に試してみます。

#coding: UTF-8

print "11 << 1 = ", 11 << 1
print "11 >> 1 = ", 11 >> 1
print "-10 >> 1 = ", -10 >> 1

上記を「test5-1.py」として保存します。保存する時の文字コードはUTF-8です。そして次のように実行して下さい。

シフト演算子

( Written by Tatsuo Ikura )