(43)【基本情報技術者】2進数の値を10倍する。

投稿者: | 2023年9月28日

135 views

0. 基本から再学習

訳があって 基本情報技術者 なる資格を取ることになった。

家で子どもにパソコンを教えるときに
「父ちゃん、それ古いよ」
と馬鹿にされないように、学校の授業内容に近いことを勉強しなければと偶然思っていたところ。
良い機会なので喜んで受験することにした。

1996年の20代の頃に 第二種情報処理技術者 なる資格を取得したが、基本情報技術者はその後継資格だそうな。
30年近く経って試験内容もいろいろと変わっていることだろうし、再勉強することにした。

ちなみに2年後の1998年には 第一種情報処理技術者 なる資格を取得した。
その後もずっとシステム開発の現場にいたため、基本的なことは習得しているはずと自負しているが、受験結果は如何に・・・
落ちたら恥ずかしいかも

1. やりたいこと

タイトルのまんま。
2進数の値を10倍したいときの処理手順で
おおっ!
と子どもの目が輝く方法をメモしておきたい。

2. やってみる

まず、10倍ということは、5倍 x 2倍に分割できる。
A x 10 = A x 5 x 2

次に、5倍ということは、4倍+1個 に分割できる。 ←ここが面白い! ビットシフトで表現できる形、すなわち x 2n を使う形に変形する。
A x 10 = (A x 4 + A) x 2

これをシフト演算子を使って書くと、以下のようになる。
A x 10 = (A << 2 + A) << 1

実際に A=6 (110B) で試してみる。
A x 10 = 60 (111100B)
になるはずだ。

以下、中間の計算結果を B, Cに代入しながら、最終的な結果 Dを求める。
B = A x 4 = A << 2 = 110B << 2 = 11000B
C = B + A = 11000B + 110B = 11110B
D = C x 2 = C << 1 = 11110B << 1 = 111100B

うん、OKだ!

3. 一般化

これを一般化してみると、以下のように言える。

2進数の値 mをn倍したいときは?
1) nを 2のべき乗に分解する。
 n = 2x + y
2) mを xビットシフトした後に m x yを加算する。
3) yを更に分解・・・

例)10 x 100
100 = 26 + 36
= 26 + 25 + 4
= 26 + 25 + 22
 ↓
10 x 100 = 10 x 26 + 10 x 25 + 10 x 22
= 1010B << 6 + 1010B << 5 + 1010B << 2
= 1010000000B + 101000000B + 101000B
= 1111101000B
= 3E8H
= 3 x 256 + 14 x 16 + 8
= 768 + 224 + 8
= 1000


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)