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

回答編集履歴

1

ソース追記

2020/09/16 01:05

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -44,4 +44,59 @@
44
44
  1
45
45
  1
46
46
  4
47
- ・・・ビットフィールドに配列は使えない^^;
47
+ ・・・ビットフィールドに配列は使えない^^;
48
+ [追記]・・・初期化にしかビットフィールド使ってない^^;力任せw
49
+ ```c++
50
+ #include <iostream>
51
+
52
+ typedef struct {
53
+ unsigned val1 : 3;
54
+ unsigned val2 : 3;
55
+ unsigned val3 : 3;
56
+ unsigned val4 : 3;
57
+ unsigned val5 : 3;
58
+ unsigned val6 : 3;
59
+ unsigned val7 : 3;
60
+ unsigned val8 : 3;
61
+ unsigned val9 : 3;
62
+ } bitField;
63
+
64
+ int main(void)
65
+ {
66
+ bitField bf = {0, 2, 0, 2, 2, 1, 1, 1, 4};
67
+
68
+ unsigned int cnt[8] = {0};
69
+ cnt[bf.val1]++;
70
+ cnt[bf.val2]++;
71
+ cnt[bf.val3]++;
72
+ cnt[bf.val4]++;
73
+ cnt[bf.val5]++;
74
+ cnt[bf.val6]++;
75
+ cnt[bf.val7]++;
76
+ cnt[bf.val8]++;
77
+ cnt[bf.val9]++;
78
+ //
79
+ int sum = bf.val1 + bf.val2 + bf.val3 + bf.val4 + bf.val5 + bf.val6 + bf.val7 + bf.val8 + bf.val9;
80
+ int nz = 0;
81
+ int u2 = 0;
82
+ //
83
+ for(size_t i = 1; i < 8; i++) {
84
+ // std::cout << cnt[i] << std::endl;
85
+ nz += cnt[i];
86
+ if(i > 1) {
87
+ u2 += cnt[i];
88
+ }
89
+ }
90
+ std::cout << "元の配列の各値の合計:" << sum << std::endl;
91
+ std::cout << "元の配列の各値が1以上の要素数:" << nz << std::endl;
92
+ std::cout << "元の配列の各値が2以上の要素数:" << u2 << std::endl;
93
+ std::cout << "元の配列の各値が2の要素数:" << cnt[2] << std::endl;
94
+ //
95
+ return 0;
96
+ }
97
+ ```
98
+ 結果
99
+ 元の配列の各値の合計:13
100
+ 元の配列の各値が1以上の要素数:7
101
+ 元の配列の各値が2以上の要素数:4
102
+ 元の配列の各値が2の要素数:3