Essayons d'autres chiffres, disons 1
y 7
et obtenons une sortie différente :
byte[] test = new byte[] {1, 7};
BitArray ba = new BitArray(test);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ba.Length; i++) {
if (i > 0 && i % 8 == 0)
sb.Append(' ');
sb.Append(ba[i] ? '1' : '0');
}
Console.Write(sb.ToString());
Résultat :
10000000 11100000
Tu peux voir ce qui se passe ?
1 -> 0b00000001 -> 10000000 -> True False False False False False False False
7 -> 0b00000111 -> 11100000 -> True True True False False False False False
Revenons aux valeurs initiales : 36, 146
36 -> 0b00100100 -> 00100100 -> False False True False False True False False
146 -> 0b10010010 -> 01001001 -> False True False False True False False True
Quand on met 1
en binaire le 1er bit le le plus à droite : 00000001
Cependant, lorsque nous représentons le même 1
comme un tableau de bits, nous avons le premier bit le plus à gauche : [1, 0, 0, 0, 0, 0, 0, 0] == [True, False, False, False, False, False, False, False]
.
Malheureusement, 36
est un binaire palindrome 00100100
Il lit de manière égale de gauche à droite et de droite à gauche, ce qui, je pense, est la cause du comportement surprenant (pourquoi les 8 premiers bits sont corrects alors que les 8 derniers ne le sont pas).