Как уже говорилось, это побитовое И, а не логическое И. Я вижу, что это было сказано довольно много раз до меня, но объяснения ИМО не так легко понять.
Мне нравится думать об этом так:
Запишите двоичные числа друг под другом (здесь я делаю 5 и 1):
101
001
Теперь нам нужно превратить это в двоичное число, где все 1 из 1-го числа, которое также во втором, передается, то есть - в данном случае:
001
В этом случае мы видим, что он дает тот же номер, что и 2-й номер, в котором эта операция (в VB) возвращает true. Давайте посмотрим на другие примеры (используя 5 как i):
(5 и 2)
101
010
----
000
(ложь)
(5 и 4)
101
100
---
100
(истина)
(5 и 8)
0101
1000
----
0000
(ложь)
(5 и 16)
00101
10000
-----
00000
(ложь)
РЕДАКТИРОВАТЬ: и, очевидно, я скучаю по всей сути вопроса - вот перевод на C #:
cbi[1].Checked = i & 1 == 1;
cbi[2].Checked = i & 2 == 2;
cbi[3].Checked = i & 4 == 4;
cbi[4].Checked = i & 8 == 8;
cbi[5].Checked = i & 16 == 16;