回答編集履歴

1

コード追加

2020/05/29 15:33

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,67 @@
1
1
  check_resultを対応するチェックボックスの数値とAND演算して、0じゃなかったらチェックを付ければいいんじゃないでしょうか。
2
+
3
+
4
+
5
+ 2のべき乗ということは、それぞれが2進数の1桁に当てはまります。
6
+
7
+ 例に上がってる515を2進数にすると、
8
+
9
+ ‭‭001000000011‬
10
+
11
+ となります。1になってる桁が、チェックの入ってるチェックボックスということになります。
12
+
13
+ 2桁目(2時)を取り出すなら、‭‭000000000010 (10進数の2)とANDを取ればよいのです。
14
+
15
+ ```C#
16
+
17
+ //1~12時に対応したチェックボックスの配列
18
+
19
+ CheckBox[] checks =
20
+
21
+ {
22
+
23
+ checkBox1,
24
+
25
+ checkBox2,
26
+
27
+ checkBox3,
28
+
29
+ checkBox4,
30
+
31
+ checkBox5,
32
+
33
+ checkBox6,
34
+
35
+ checkBox7,
36
+
37
+ checkBox8,
38
+
39
+ checkBox9,
40
+
41
+ checkBox10,
42
+
43
+ checkBox11,
44
+
45
+ checkBox12
46
+
47
+ };
48
+
49
+
50
+
51
+ int check_result = 4095;
52
+
53
+
54
+
55
+ //チェックボックス配列のインデックスをビット位置とし、
56
+
57
+ //ビット位置とAND演算した結果が0以外ならチェックを入れる
58
+
59
+ for (int bitPos = 0; bitPos < checks.Length; bitPos++)
60
+
61
+ {
62
+
63
+ checks[bitPos].Checked = (check_result & (1 << bitPos)) != 0;
64
+
65
+ }
66
+
67
+ ```