質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Q&A

1回答

432閲覧

C言語 コードについての説明

vIp8jN

総合スコア0

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

0グッド

0クリップ

投稿2020/07/25 07:48

編集2020/07/25 09:20

前提・実現したいこと

初めての質問失礼します。
「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 = a0
b1;
c10 = a1b0;
c11 = a1
b1;
初めは上のようにコードを書いていたのですが、ソースコードにあるようにしたら、いろいろ応用が効く?のか分からないですが、変更されて、
「被乗数と乗数をともに16ビットを上位8ビットと下位8ビットに分割し夫々について合計4つの組み合わせで乗算を実施して得られた4つの部分和を加算すると16ビット乗算の積(32ビット)になる」と説明したら、上位8bit、下位8bit、部分積をsれぞれ識別できないのか、部分積と8bitの乗算器の関係には気づかないのかと釘を刺され、頭を抱えています
右に8ビットシフトがポイントだと思っているのですが、上位8ビット、下位8ビットの意味がよく分かっておりません。うまく説明するために、どのようなことを書けばいいのでしょうか。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2020/07/25 08:50

ソースコードは、 ```C と ``` の間に入れましょう。 意味がよく分からないとの事ですが、ソースにコメントがありません。 その行で何をしたいか、したかをコメントしてみましょう。そうすれば、少しは分かるのではないでしょうか? (と言うより、上記のソースだけでは意図が分からない) apx_mul?() も不明。 なんとなく、for()のループが怪しい気がするのですが、、、
vIp8jN

2020/07/25 09:24

改善の内容の返信ありがとうございます。 言ってしまうと報告書の説明で、本論で何をしたか、コードはどのような動きをするか説明しなければならないのですが、上位8bit、下位8bit、部分積をそれぞれ識別できないのか、部分積と8bitの乗算器の関係には気づかないのか、どうして16ビット近似乗算器の環境として利用できるのかと、指摘され頭を抱えています。プログラミングの知識がないもので、質問内容も筋違いになっているのかもしれません。すみません。 ご教授していただけると助かります。
pepperleaf

2020/07/25 11:50

提示のソースを見ると意味不明が多く、困るのですが、自分で作られた or どこからかのコピーなのでしょうか? (あと、インデントが無いので見づらい) で、コードを見ると、 > for (b = 0x00; b < 0x10000; ++b) シフト演算との事ですが、1づつ加算、で次の > b1 = (0x0FF00 & b) >> 8 最初の 0xFFまで、b1 は 常に 0 この意味は? 次の for()の中にある > d = a * b; d は、16bit(0x10000) を越えるのですが、良い?? 等々。
guest

回答1

0

シフト演算子 - 演算子 - C言語 入門

ここらへんでシフト、と言うもんが理解できないでしょうか

投稿2020/07/25 09:31

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問