2009-03-12 5 views
3

Quand je conpile ce code:Y at-il un problème avec BitArrays en 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); 
} 

Je reçois la sortie suivante:

True True True

Quand je fais un XOR sur deux valeurs booléennes par disant vrai^vrai je deviens faux.

Y at-il un problème avec le code? Ma mémoire de la table de vérité pour XOR était que True XOR True est faux.

+0

Les frameworks comme ceux de C# ou de Java ne sont presque jamais en cause parce que tant d'autres personnes les utilisent et les testent. Vérifiez toujours votre propre code en premier. Dans ce cas, la réponse de Kent le couvre. – Keith

+0

ouais j'ai essayé de supprimer la question une fois que j'avais remarqué cela mais parce que sa réponse a été votée je ne peux pas la supprimer. Quelqu'un d'autre le ferme. –

+1

Pourquoi cela se lève-t-il? –

Répondre

27

Erreur de copie et de collage.

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

Ce devrait être:

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

Été là, fait cela. Et ce n'est pas une erreur que vous faites une fois, au début de votre carrière, et ne le répétez jamais - copier/coller gremlins se cachent pour toujours derrière votre moniteur, attendant juste un laps de temps momentané dans la concentration. ;) –

6

Vous définissez bits à true deux fois. Vous n'êtes pas les paramètres moreBits à true, donc il est par défaut à tous- false. Je blâme copier/coller!

EDIT: dans le peu de temps qu'il m'a fallu pour écrire ce Kent a répondu et a été upvoted 8 fois!

+0

+1 ... awww .. nous avons tous été là mec :) –