2009-03-12 1 views
3

Когда я conpile этот код:Что-то не так с BitArrays в C#?

BitArray bits = new BitArray(3); 
bits[0] = true; 
bits[1] = true; 
bits[2] = true; 

BitArray moreBits = new BitArray(3); 
bits[0] = true; 
bits[1] = true; 
bits[2] = true; 

BitArray xorBits = bits.Xor(moreBits); 

foreach (bool bit in xorBits) 
{ 
Console.WriteLine(bit); 
} 

я получаю следующий результат:

True True Истинную

Когда я исключающее на двух логических значений по говоря true true, я становлюсь ложным.

С кодом что-то не так. Моя память о таблице истинности для XOR заключалась в том, что True XOR True является ложным.

+0

Рамки, подобные C# или Java, почти никогда не виноваты, потому что многие другие люди используют их и тестируют их. Всегда проверяйте свой собственный код. В этом случае ответ Кента охватывает его. – Keith

+0

Да, я попытался удалить вопрос, как только заметил это, но поскольку его ответ был проголосован, я не могу его удалить. Кто-то еще его закрыл. –

+1

Почему этот встающий голос проголосовали? –

ответ

27

Ошибка копирования и вставки.

BitArray moreBits = new BitArray(3); 
bits[0] = true; 
bits[1] = true; 
bits[2] = true; 

Это должно быть:

BitArray moreBits = new BitArray(3); 
moreBits[0] = true; 
moreBits[1] = true; 
moreBits[2] = true; 
+0

Был там, сделал это. И это не ошибка, которую вы делаете однажды, на ранней стадии своей карьеры и никогда не повторяете - копировать/вставлять гремлины навсегда за вашим монитором, просто ожидая кратковременного перерыва в концентрации. ;) –

6

Вы устанавливаете bits в true дважды. У вас нет настроек moreBits до true, поэтому он по умолчанию используется для всех - false. Я виню копию/вставку!

РЕДАКТИРОВАТЬ: за короткое время мне потребовалось написать этот Кент, который ответил и получил поддержку 8 раз!

+0

+1 ... awww .. мы все были там чувак :) –

Смежные вопросы