Я создал одну программу BitArray.
private void Form1_Load(object sender, EventArgs e)
{
BitArray bit1 = new BitArray(4);
bit1[0] = true;
bit1[1] = false;
bit1[2] = true;
bit1[3] = false;
for (int a = 0; a < bit1.Count; a++)
{
listBox1.Items.Add(bit1[a]);
}
bool[] arr = new bool[] { false, true, true, false };
BitArray bit2 = new BitArray(arr);
for (int a = 0; a < bit2.Count; a++)
{
listBox2.Items.Add(bit2[a]);
}
BitArray bit3 = bit1.And(bit2);
for (int a = 0; a < bit3.Count; a++)
{
listBox3.Items.Add(bit3[a]);
}
for (int a = 0; a < bit1.Count; a++)
{
listBox4.Items.Add(bit1[a]);
}
for (int a = 0; a < bit2.Count; a++)
{
listBox5.Items.Add(bit2[a]);
}
}
listBox4
дает следующий результат:
false, false, true, false
теперь в listBox4
я думаю, что правильный вывод следующий, потому что я ничего не меняю в массиве bit1:
true, false, true, false
Итак, в чем проблема с массивом bit1
?
Метод And мутирует (т.е. изменяет объект) BitArray. Из документации для возвращаемого значения BitArray.And:
[Возвращает] [t] он текущий экземпляр, содержащий результат побитовой операции И на элементах текущего BitArray с соответствующими элементами в указанном BitArray.
Обратите внимание, что это текущий экземпляр.
Массив bit1
будет тем же самым экземпляром, что и массив bit3
. И поскольку они являются одним и тем же экземпляром listBox3
а listBox4
будет иметь одинаковые значения.
Изменение: форматирование и уточнение
Вы манипулировали BitArray bit1
BitArray bit3 = bit1.And(bit2);
"Выполняет побитовое И действие на элементах текущего BitArray с соответствующими элементами в указанном BitArray". MSDN