メモリーやディスクには1Bit単位では記録できない1Byte(8Bit)が必要
シフト演算
コンピュータは剰余計算を行うためにシフト演算というものを行なっている。
シフト演算には左シフト(掛け算)と右シフト(割り算)がある
左シフト(掛け算)
桁を左に移動する(下の例では2桁)
桁から溢れた分はなくなり、新しくできた部分に部分に0を入れる
0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | ||
---|---|---|---|---|---|---|---|---|---|
↑LOST | ↑LOST | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓NEW | ↓NEW |
1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
左シフト2だった場合は4倍になる(47→188になっているのがわかる)
例えば5倍にしたいなら[元の数値の左シフト2(4倍)]と[元の数値(1倍)]をたす
右シフト(割り算)
論理右シフトと算術右シフトで対応が異なる
論理シフト
シフト対象が正の数である場合行う
桁を右に移動する(下の例では2桁)
桁から溢れた分はなくなり、新しくできた部分に部分に0を入れる
0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
↓NEW | ↓NEW | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↑LOST | ↑LOST |
0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
(72→18)
算術シフト
シフト対象が負の数である場合行う
桁を右に移動する(下の例では2桁)
桁から溢れた分はなくなり、新しくできた部分に部分に1を入れる
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
↓NEW | ↓NEW | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↑LOST | ↑LOST |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
(-12→-3)
マイナスの値の表現については補数で検索
参考
プログラムはなぜ動くのか(矢沢久雄)日経BP社