回答編集履歴

1

ソース追記

2020/09/16 01:05

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -91,3 +91,113 @@
91
91
  4
92
92
 
93
93
  ・・・ビットフィールドに配列は使えない^^;
94
+
95
+ [追記]・・・初期化にしかビットフィールド使ってない^^;力任せw
96
+
97
+ ```c++
98
+
99
+ #include <iostream>
100
+
101
+
102
+
103
+ typedef struct {
104
+
105
+ unsigned val1 : 3;
106
+
107
+ unsigned val2 : 3;
108
+
109
+ unsigned val3 : 3;
110
+
111
+ unsigned val4 : 3;
112
+
113
+ unsigned val5 : 3;
114
+
115
+ unsigned val6 : 3;
116
+
117
+ unsigned val7 : 3;
118
+
119
+ unsigned val8 : 3;
120
+
121
+ unsigned val9 : 3;
122
+
123
+ } bitField;
124
+
125
+
126
+
127
+ int main(void)
128
+
129
+ {
130
+
131
+ bitField bf = {0, 2, 0, 2, 2, 1, 1, 1, 4};
132
+
133
+
134
+
135
+ unsigned int cnt[8] = {0};
136
+
137
+ cnt[bf.val1]++;
138
+
139
+ cnt[bf.val2]++;
140
+
141
+ cnt[bf.val3]++;
142
+
143
+ cnt[bf.val4]++;
144
+
145
+ cnt[bf.val5]++;
146
+
147
+ cnt[bf.val6]++;
148
+
149
+ cnt[bf.val7]++;
150
+
151
+ cnt[bf.val8]++;
152
+
153
+ cnt[bf.val9]++;
154
+
155
+ //
156
+
157
+ int sum = bf.val1 + bf.val2 + bf.val3 + bf.val4 + bf.val5 + bf.val6 + bf.val7 + bf.val8 + bf.val9;
158
+
159
+ int nz = 0;
160
+
161
+ int u2 = 0;
162
+
163
+ //
164
+
165
+ for(size_t i = 1; i < 8; i++) {
166
+
167
+ // std::cout << cnt[i] << std::endl;
168
+
169
+ nz += cnt[i];
170
+
171
+ if(i > 1) {
172
+
173
+ u2 += cnt[i];
174
+
175
+ }
176
+
177
+ }
178
+
179
+ std::cout << "元の配列の各値の合計:" << sum << std::endl;
180
+
181
+ std::cout << "元の配列の各値が1以上の要素数:" << nz << std::endl;
182
+
183
+ std::cout << "元の配列の各値が2以上の要素数:" << u2 << std::endl;
184
+
185
+ std::cout << "元の配列の各値が2の要素数:" << cnt[2] << std::endl;
186
+
187
+ //
188
+
189
+ return 0;
190
+
191
+ }
192
+
193
+ ```
194
+
195
+ 結果
196
+
197
+ 元の配列の各値の合計:13
198
+
199
+ 元の配列の各値が1以上の要素数:7
200
+
201
+ 元の配列の各値が2以上の要素数:4
202
+
203
+ 元の配列の各値が2の要素数:3