先頭へ戻る

シフト演算 | Programming Place Plus 用語集

Programming Place Plus トップページ -- 用語集

先頭へ戻る

名称

解説

ビット列に含まれるビットの位置を、左方向あるいは右方向にスライド(シフト)させる操作のことです。

左右どちらの方向へシフトするのかは重要なので、左方向にシフトすることを左シフト、右方向にシフトすることを右シフトと呼び分けます。

シフトを行うと、一方の端からはビットが溢れることになり、逆側の端には空きができることになります。溢れた部分と空いた部分をどのように処置するかにはいくつか考え方がありますが、溢れた部分は単純に捨て、空いた部分には 0 を埋めることが多いです。また、ビット列が循環しているイメージで、溢れた部分を空いた部分に入れるという発想もあり、とくに、ローテート(環状シフト)と呼ばれます。

また、論理シフト算術シフトという分類もあります。論理シフトはここまで説明したように、ビット列のすべてのビットを対象にしたシフト操作です。算術シフトは、ビット列の最上位のビットを変化させず、残りのビットだけでシフトを行うというもので、整数の最上位に符号ビットが置かれているケースで、符号ビットを破壊してしまわないようにするためのシフト操作です。

プログラミング言語には、シフト演算を行うための演算子が用意されていることがあります。また、論理シフトと算術シフトを使い分けることができる言語もあります。

C言語、C++ の場合

C言語や C++ では、左シフトを <<、右シフトを >> で表現します。

これらの言語では、負の整数を右シフトするときの動作は処理系定義とされています(つまり、算術シフトになる保証はない)1

C言語での解説が、C言語編第49章にあります。C++ でも同じです。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー