BitArray И операция

1

Я создал одну программу 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?

Теги:

2 ответа

3
Лучший ответ

Метод And мутирует (т.е. изменяет объект) BitArray. Из документации для возвращаемого значения BitArray.And:

[Возвращает] [t] он текущий экземпляр, содержащий результат побитовой операции И на элементах текущего BitArray с соответствующими элементами в указанном BitArray.

Обратите внимание, что это текущий экземпляр.

Массив bit1 будет тем же самым экземпляром, что и массив bit3. И поскольку они являются одним и тем же экземпляром listBox3 а listBox4 будет иметь одинаковые значения.

Изменение: форматирование и уточнение

  • 5
    Что за глупый API.
  • 0
    Огромное спасибо. Я понял.
Показать ещё 2 комментария
3

Вы манипулировали BitArray bit1

BitArray bit3 = bit1.And(bit2);

"Выполняет побитовое И действие на элементах текущего BitArray с соответствующими элементами в указанном BitArray". MSDN

  • 1
    Спасибо. Я понял проблему. BitArray - это изменчивый тип.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню