ビットシフト

読み:ビットシフト
外語:bit shift 英語
品詞:さ変名詞

レジスター変数のビット列を右方向ないし左方向にずらすビット演算

目次

符号ビットの扱いにより、算術シフト論理シフトに分けられる。

ビットシフト演算では、左に1ビットずらすと整数値は2倍に、右に1ビットずらすと整数値は1/2倍になる。

手法

ビットシフト演算のみでは、2±nの計算しかできないため常に偶数倍または偶数分の一(正確には2の累乗)しか求められないが、これに加算を加えれば、奇数倍を求めることも可能である。ただし、奇数分の一(正確には2の累乗でない数を割る数とする除算)は簡単には実現できない。

高級言語の場合はコンパイラー次第であるが、アセンブリ言語の場合、CPUが持つ乗算命令や除算命令を用いるより高速に結果を求められるため、古くよりよく使われている。

サンプル

xが引数、yに結果を入れるとすると、次のようになる。

  • 2倍 y = x << 1;
  • 3倍 y = (x << 1) + x;
  • 4倍 y = x << 2;
  • 5倍 y = (x << 2) + x;
  • 6倍 y = (x << 2) + (x << 1);
  • 7倍 y = (x << 2) + (x << 1) + x;
  • 8倍 y = x << 3;
  • 9倍 y = (x << 3) + x;
  • 10倍 y = (x << 3) + (x << 1);
  • 11倍 y = (x << 3) + (x << 1) + x;
  • 12倍 y = (x << 3) + (x << 2);
  • 13倍 y = (x << 3) + (x << 2) + x;
  • 14倍 y = (x << 3) + (x << 2) + (x << 1);
  • 15倍 y = (x << 3) + (x << 2) + (x << 1) + x;
  • 16倍 y = x << 4;

必要な組み合わせが増える倍率の場合は乗算命令を使うより遅くなる可能性があるが、古く8ビットMPUや一部の16ビットMPUなどのように乗算命令や除算命令を持たないMPU、持っていても非常に遅いMPUなどでは、アセンブリ言語でプログラミングする際に有用なノウハウであった。

用語の所属
ビット演算
関連する用語
算術シフト
論理シフト
レジスター
ローテート

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club