前提・実現したいこと
初めての質問失礼します。
「8bit近似乗算器を使い、16bit近似乗算器を構成できる環境をつくる」コードの説明をしなければならないのですが、
・被乗数と乗数をともに16ビットを上位8ビットと下位8ビットに分割すること
・↑の夫々について合計4つの組み合わせで乗算を実施すること(8ビット乗算)
・得られた4つの部分和を加算すると16ビット乗算の積(32ビット)になること
・どうして16ビット近似乗算器の環境として利用できるのか
を説明すべきと注意されたのですが、何回も書き直しさせられて根本的に理解できていないのかなと思いました。コードは説明するためなので、ところどころミスはあるかもしれませんが、すみません。
コードを変えるより、日本語の説明がわからないといった感じです。
このコードがどのような動きをするコードか説明できません。
コードの説明について。
コード
c
エラーメッセージ
### 該当のソースコード ```c int main() { unsigned long a, b, c, d; unsigned long a1, a0, b1, b0, c11, c10, c01, c00; for (b = 0x00; b < 0x10000; ++b) { b1 = (0x0FF00 & b) >> 8; b0 = 0x0F & b; for (a = 0x00; a < 0x10000; ++a) { d = a * b; a1 = (0x0FF00 & a) >> 8; a0 = 0x0F & a; c00 = apx_mul1(a0,b0); //a0*b0; c01 = apx_mul2(a0,b1); //a0*b1; c10 = apx_mul3(a1,b0); //a1*b0; c11 = apx_mul4(a1,b1); //a1*b1; c = (c11 << 16) + (c10 << 8) + (c01 << 8) + c00; // if (c != d) // printf("%lu * %lu = %lu != %lu¥n", a, b, d, c); } } return 0; }
試したこと
c00 = a0b0;
c01 = a0b1;
c10 = a1b0;
c11 = a1b1;
初めは上のようにコードを書いていたのですが、ソースコードにあるようにしたら、いろいろ応用が効く?のか分からないですが、変更されて、
「被乗数と乗数をともに16ビットを上位8ビットと下位8ビットに分割し夫々について合計4つの組み合わせで乗算を実施して得られた4つの部分和を加算すると16ビット乗算の積(32ビット)になる」と説明したら、上位8bit、下位8bit、部分積をsれぞれ識別できないのか、部分積と8bitの乗算器の関係には気づかないのかと釘を刺され、頭を抱えています
右に8ビットシフトがポイントだと思っているのですが、上位8ビット、下位8ビットの意味がよく分かっておりません。うまく説明するために、どのようなことを書けばいいのでしょうか。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。