シフト演算:2進数をあらわすビット列を左もしくは右にずらす操作
論理シフト
符号を慮せずに行うシフト操作。最上位のビットも含めてシフトさせるという考え方。
- 左論理シフト:元の数値の 2n倍したもの
- 右論理シフト:元の数値の1/2n倍したもの
算術シフト
符号を考慮して行うシフト演算。先頭のビットを符号として固定にし、それ以降のビットだけ左右にずらす
- 左論理シフト:元の数値の 2n倍したもの。空スペースには0
- 右論理シフト:元の数値の1/2n倍したもの。空スペースには符号
掛け算・割り算
掛け算
- 書ける数を2nにあたる数字に分解
- それぞれの桁で掛けて、合算
A × 7 = A × (4+2+1)
A × 7 = A × (2の2乗+2の1乗+2の0乗)
A × 7 = A×2の2乗+A×2の1乗+A×2の0乗
割り算
- 割る数を2進数に直す
- 元の数字から割りたい数で何回引けるのか?で計算する
15÷3=1111÷11
元の数字を超えない範囲で割る数を左にシフトして、引く … 1111-1100=11
同様に余りを割りたい数で引いてやる…11-11=0
引くことができた数は…
2ビットシフト+0ビットシフト=4+1=5