《シフト》
Create:2002/02/11
[BACK] [NEXT] [メニュー]
   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

[BACK] [NEXT] [メニュー]