質問編集履歴

3

改善

2020/07/25 09:20

投稿

vIp8jN
vIp8jN

スコア0

test CHANGED
File without changes
test CHANGED
@@ -23,6 +23,8 @@
23
23
  コードを変えるより、日本語の説明がわからないといった感じです。
24
24
 
25
25
 
26
+
27
+ このコードがどのような動きをするコードか説明できません。
26
28
 
27
29
 
28
30
 
@@ -102,7 +104,19 @@
102
104
 
103
105
  ### 試したこと
104
106
 
107
+
108
+
105
-
109
+ c00 = a0*b0;
110
+
111
+ c01 = a0*b1;
112
+
113
+ c10 = a1*b0;
114
+
115
+ c11 = a1*b1;
116
+
117
+ 初めは上のようにコードを書いていたのですが、ソースコードにあるようにしたら、いろいろ応用が効く?のか分からないですが、変更されて、
118
+
119
+ 「被乗数と乗数をともに16ビットを上位8ビットと下位8ビットに分割し夫々について合計4つの組み合わせで乗算を実施して得られた4つの部分和を加算すると16ビット乗算の積(32ビット)になる」と説明したら、上位8bit、下位8bit、部分積をsれぞれ識別できないのか、部分積と8bitの乗算器の関係には気づかないのかと釘を刺され、頭を抱えています
106
120
 
107
121
  右に8ビットシフトがポイントだと思っているのですが、上位8ビット、下位8ビットの意味がよく分かっておりません。うまく説明するために、どのようなことを書けばいいのでしょうか。
108
122
 

2

改善

2020/07/25 09:20

投稿

vIp8jN
vIp8jN

スコア0

test CHANGED
File without changes
test CHANGED
@@ -52,59 +52,53 @@
52
52
 
53
53
  ```c
54
54
 
55
- ソースコード
56
-
57
- ```#include <stdio.h>
58
-
59
55
  int main()
60
56
 
61
57
  {
62
58
 
63
- unsigned long a, b, c, d;
59
+ unsigned long a, b, c, d;
64
60
 
65
- unsigned long a1, a0, b1, b0, c11, c10, c01, c00;
61
+ unsigned long a1, a0, b1, b0, c11, c10, c01, c00;
66
62
 
67
-
68
63
 
69
- for (b = 0x00; b < 0x10000; ++b)
70
64
 
71
- { b1 = (0x0FF00 & b) >> 8;
65
+ for (b = 0x00; b < 0x10000; ++b)
72
66
 
73
- b0 = 0x0F & b;
67
+ { b1 = (0x0FF00 & b) >> 8;
74
68
 
75
- for (a = 0x00; a < 0x10000; ++a)
69
+ b0 = 0x0F & b;
76
70
 
77
- { d = a * b;
71
+ for (a = 0x00; a < 0x10000; ++a)
78
72
 
79
- a1 = (0x0FF00 & a) >> 8;
73
+ { d = a * b;
80
74
 
81
- a0 = 0x0F & a;
75
+ a1 = (0x0FF00 & a) >> 8;
82
76
 
83
- c00 = apx_mul1(a0,b0); //a0*b0;
77
+ a0 = 0x0F & a;
84
78
 
85
- c01 = apx_mul2(a0,b1); //a0*b1;
79
+ c00 = apx_mul1(a0,b0); //a0*b0;
86
80
 
87
- c10 = apx_mul3(a1,b0); //a1*b0;
81
+ c01 = apx_mul2(a0,b1); //a0*b1;
88
82
 
89
- c11 = apx_mul4(a1,b1); //a1*b1;
83
+ c10 = apx_mul3(a1,b0); //a1*b0;
90
84
 
91
- c = (c11 << 16) + (c10 << 8) + (c01 << 8) + c00;
85
+ c11 = apx_mul4(a1,b1); //a1*b1;
92
86
 
93
- // if (c != d)
87
+ c = (c11 << 16) + (c10 << 8) + (c01 << 8) + c00;
94
88
 
95
- // printf("%lu * %lu = %lu != %lu¥n", a, b, d, c);
89
+ // if (c != d)
96
90
 
97
- }
91
+ // printf("%lu * %lu = %lu != %lu¥n", a, b, d, c);
98
92
 
99
- }
93
+ }
94
+
95
+ }
100
96
 
101
97
  return 0;
102
98
 
103
99
  }
104
100
 
105
-
101
+ ```
106
-
107
-
108
102
 
109
103
  ### 試したこと
110
104
 

1

説明の仕方を追加

2020/07/25 08:59

投稿

vIp8jN
vIp8jN

スコア0

test CHANGED
File without changes
test CHANGED
@@ -17,6 +17,10 @@
17
17
 
18
18
 
19
19
  を説明すべきと注意されたのですが、何回も書き直しさせられて根本的に理解できていないのかなと思いました。コードは説明するためなので、ところどころミスはあるかもしれませんが、すみません。
20
+
21
+
22
+
23
+ コードを変えるより、日本語の説明がわからないといった感じです。
20
24
 
21
25
 
22
26