teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

改善

2020/07/25 09:20

投稿

vIp8jN
vIp8jN

スコア0

title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,7 @@
11
11
 
12
12
  コードを変えるより、日本語の説明がわからないといった感じです。
13
13
 
14
+ このコードがどのような動きをするコードか説明できません。
14
15
 
15
16
 
16
17
 
@@ -50,7 +51,13 @@
50
51
  }
51
52
  ```
52
53
  ### 試したこと
54
+
53
-
55
+ c00 = a0*b0;
56
+ c01 = a0*b1;
57
+ c10 = a1*b0;
58
+ c11 = a1*b1;
59
+ 初めは上のようにコードを書いていたのですが、ソースコードにあるようにしたら、いろいろ応用が効く?のか分からないですが、変更されて、
60
+ 「被乗数と乗数をともに16ビットを上位8ビットと下位8ビットに分割し夫々について合計4つの組み合わせで乗算を実施して得られた4つの部分和を加算すると16ビット乗算の積(32ビット)になる」と説明したら、上位8bit、下位8bit、部分積をsれぞれ識別できないのか、部分積と8bitの乗算器の関係には気づかないのかと釘を刺され、頭を抱えています
54
61
  右に8ビットシフトがポイントだと思っているのですが、上位8ビット、下位8ビットの意味がよく分かっておりません。うまく説明するために、どのようなことを書けばいいのでしょうか。
55
62
 
56
63
 

2

改善

2020/07/25 09:20

投稿

vIp8jN
vIp8jN

スコア0

title CHANGED
File without changes
body CHANGED
@@ -25,33 +25,30 @@
25
25
  ### 該当のソースコード
26
26
 
27
27
  ```c
28
- ソースコード
29
- ```#include <stdio.h>
30
28
  int main()
31
29
  {
32
- unsigned long a, b, c, d;
30
+ unsigned long a, b, c, d;
33
- unsigned long a1, a0, b1, b0, c11, c10, c01, c00;
31
+ unsigned long a1, a0, b1, b0, c11, c10, c01, c00;
34
-
32
+
35
- for (b = 0x00; b < 0x10000; ++b)
33
+ for (b = 0x00; b < 0x10000; ++b)
36
- { b1 = (0x0FF00 & b) >> 8;
34
+ { b1 = (0x0FF00 & b) >> 8;
37
- b0 = 0x0F & b;
35
+ b0 = 0x0F & b;
38
- for (a = 0x00; a < 0x10000; ++a)
36
+ for (a = 0x00; a < 0x10000; ++a)
39
- { d = a * b;
37
+ { d = a * b;
40
- a1 = (0x0FF00 & a) >> 8;
38
+ a1 = (0x0FF00 & a) >> 8;
41
- a0 = 0x0F & a;
39
+ a0 = 0x0F & a;
42
- c00 = apx_mul1(a0,b0); //a0*b0;
40
+ c00 = apx_mul1(a0,b0); //a0*b0;
43
- c01 = apx_mul2(a0,b1); //a0*b1;
41
+ c01 = apx_mul2(a0,b1); //a0*b1;
44
- c10 = apx_mul3(a1,b0); //a1*b0;
42
+ c10 = apx_mul3(a1,b0); //a1*b0;
45
- c11 = apx_mul4(a1,b1); //a1*b1;
43
+ c11 = apx_mul4(a1,b1); //a1*b1;
46
- c = (c11 << 16) + (c10 << 8) + (c01 << 8) + c00;
44
+ c = (c11 << 16) + (c10 << 8) + (c01 << 8) + c00;
47
- // if (c != d)
45
+ // if (c != d)
48
- // printf("%lu * %lu = %lu != %lu¥n", a, b, d, c);
46
+ // printf("%lu * %lu = %lu != %lu¥n", a, b, d, c);
49
- }
47
+ }
50
- }
48
+ }
51
49
  return 0;
52
50
  }
53
-
51
+ ```
54
-
55
52
  ### 試したこと
56
53
 
57
54
  右に8ビットシフトがポイントだと思っているのですが、上位8ビット、下位8ビットの意味がよく分かっておりません。うまく説明するために、どのようなことを書けばいいのでしょうか。

1

説明の仕方を追加

2020/07/25 08:59

投稿

vIp8jN
vIp8jN

スコア0

title CHANGED
File without changes
body CHANGED
@@ -9,6 +9,8 @@
9
9
 
10
10
  を説明すべきと注意されたのですが、何回も書き直しさせられて根本的に理解できていないのかなと思いました。コードは説明するためなので、ところどころミスはあるかもしれませんが、すみません。
11
11
 
12
+ コードを変えるより、日本語の説明がわからないといった感じです。
13
+
12
14
 
13
15
 
14
16