10進数を10倍、100倍、1000倍、
するのは簡単である。
倍するためには、
左にゼロを
個付ければ良い。これは、左シフトである。同様に
倍、
倍、
倍、
するのは簡単である。
倍するためには、小数点の位置を
個左に寄せれば良い。これは右シフトである。
16進数の場合も同じである。たとえば、を
倍や
倍、
倍や
倍すると
となる。やはり、右や左にシフトさせれば良い。
2進数の場合も全く同じである。この場合、の計算が簡単である。が正の整数
の場合、左にビットシフトさせる。一方、が負の整数の場合、の絶対値分、右
にシフトさせる。
CASL IIで取り扱う16ビットの整数を
倍する事を考える。もし、その16ビットが正
で有れば、それは簡単である。先に示したように、
ビット右や左にシフトさせれば良
い。
問題は、符号付き整数で、第15ビットが1の負の場合である。これは、実例を示した方が
分かりやすい。たとえば、
を2倍と4倍する事を考える。2倍すると
で、4倍すると
である。それぞれを、2の補数で取り扱うと、
となる。
従って、CASL IIの符号付き16ビット整数の場合、
する場合は、左に
ビットシフ
トさせて、空いたビットに0を入れれば良い。
次に、1/2倍と1/4倍する事を考える。すると
となる。この場合も右に
ビットシフトさせれば良いのであるが、空いたビットには1を
入れなくてはならない。
ポイント |
---|
- 符号無し整数の場合
- 倍する場合、左にビットシフトさせて、空いたビットに0
を入れればよい。
- 倍する場合、右にビットシフトさせて、空いたビットに0
を入れればよい。
- 符号付き整数の場合
- 倍する場合、左にビットシフトさせて、空いたビットに0を入れればよい。
- 倍する場合、右にビットシフトさせて、空いたビットには符号ビッ
トを入れればよい。
|
CASL IIの整数をビットシフトを用いて2で割ったりすると、端数(小数部)が生じる。この
端数は、16ビットを越えるので、無視される。ここで、商が切り上げなのか切り下げなの
か、疑問が発生する。これについても、実際の整数で考える。
とを1ビット右にシフトさせて、1/2倍してみる。
この結果から、以下のようにまとめることができる。
ポイント |
---|
- 正の整数の場合、端数は切り下げとなる。
- 負の整数の場合、端数は切り上げとなる。
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年10月22日