2進数の乗算・除算(桁あふれは無視)
左に1ビットシフト → 2倍
左に2ビットシフト → 4倍
左に3ビットシフト → 8倍
左に4ビットシフト → 16倍
右に1ビットシフト → 1/2
右に2ビットシフト → 1/4
右に3ビットシフト → 1/8
右に4ビットシフト → 1/16
よって、「左にnビットシフトするのは2^n倍するのと同じであり
右にnビットシフトするのは2^nで割るのと同じである」ということになる。
ただ「一番左の符号ビットで足りない分を補う」と覚えておけばよい。
例)
10進数の12の場合
10進数 2進数
12 00001100
24 00011000 ×2倍 左に1ビットシフト
48 00110000 ×4倍(=2^2倍)左に2ビットシフト
96 01100000 ×8倍(=2^3倍)左に3ビットシフト
: : : : :
: : : : :
割り算は、次のようになる
10進数 2進数
12 00001100
6 00000110 ÷2 右に1ビットシフト
3 00000011 ÷4(=2^2)右に2ビットシフト
−12 11110100
−6 11111010 ÷2 右に1ビットシフト
−3 11111101 ÷4 右に2ビットシフト
2進数の乗算は,シフト演算(けた移動)と加算で行うことができる。
2進数mを2のn乗倍するにはmをnビット左にシフトすればよい。
例)
m×19
(mをaビット左にシフトした値)+(mを1ビット左にシフトした値)+ m
で求めることができる。
19を2進数で表すと10011となることから
16+2+1で表せる。
19=1×2^4+0×2^3+0×2^2+1×2^1+1
19=1×16 +0×8 +0×4 +1×2 +1
19=16+2+1
となるためである。
すべての10進整数は2進数で表せるので、上記のように2のn乗の
数の和で表すことができる。
つまり19倍するという処理で得られる数は、左に4ビットシフトして
16倍した数と、左に1ビットシフトして2倍した数と、その数自身を
加えた数値となる。
例)
1101 * 1101
1101 * 1101
= 1101 * (1000 + 100 + 1)
= 1101 * 1000 + 1101 * 100 + 1101
= 1101を3桁左にシフト + 1101を2桁左にシフト + 1101
例)
1101.11 / 1011
1101.11 / 1011 = 1.01