ビット列を左方向に一個ずらすと値が二倍になる理由を教えてください
ビット列を左方向に一つずらすと、その値が二倍になる理由は、2進数の数値表現の特性にあります。2進数は、各桁が2のべき乗の重みを持ちます。右端のビットが2^0(1の位)、その左隣が2^1(2の位)、さらにその左が2^2(4の位)というように、桁が増えるごとに重みが2倍になります。 たとえば、2進数の「101」は、左から以下のように重みがつきます。 - 1(2^2 = 4) - 0(2^1 = 0) - 1(2^0 = 1) これを計算すると、101は4 + 0 + 1 = 5になります。ここで、ビットを左に一つ移動させると「1010」になります。この新しいビット列は次のようになります。 - 1(2^3 = 8) - 0(2^2 = 0) - 1(2^1 = 2) - 0(2^0 = 0) これを計算すると、「1010」は8 + 0 + 2 + 0 = 10になります。初めの数5の二倍です。このことから、左に1つビットをずらすことは、その数を2倍にすることと等しいと言えます。 これが基本の考え方です。同様に、右にビットをずらすと、その数は半分になります。つまり、ビットの位置によって数の大きさが決まるため、ビット列を左にずらすことが数値の増加につながるのです。