数値データの最上位ビットは、符号ビットとして機能している場合があるので、符号ビットを破壊して、符号が変わってしまわないようにするために用いられます。
左方向に算術シフトする場合、最上位ビットを無視して、残りのビットだけをシフトし、空いた右端のビットには
0 が入ります。元のビット列が
11000111
だとして、左方向に 3ビット算術シフトすると
10111000
になります。
右方向に算術シフトする場合は、最上位ビットを無視して、残りのビットだけをシフトし、空いたビット(最上位ビット付近)には、最上位ビットと同じものが入ります。元のビット列が
11000111
だとして、右方向に 3ビット算術シフトすると
11111000
になります。
算術シフトに対して、最上位ビットを特別あつかいせずにシフトする方法を、論理シフトといいます。さきほどと同じ例を論理シフトに置き換えると、左シフトの例では
00111000
になり、右シフトの例では 00011000
になります。いずれも最上位ビットが代わってしまっており、これが符号ビットであるとしたら、シフト演算によって符号が変化してしまったことになります。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |