J'ai un vieux code comme ceci:décalage de bits confusion en C#
private int ParseByte(byte theByte)
{
byte[] bytes = new byte[1];
bytes[0] = theByte;
BitArray bits = new BitArray(bytes);
if (bits[0])
return 1;
else
return 0;
}
Il est long et je me suis dit que je pourrais le couper comme ceci:
private int ParseByte(byte theByte)
{
return theByte >> 7;
}
Mais, je ne reçois pas les mêmes valeurs que la première fonction. L'octet contient 00000000 ou 10000000. Que manque-t-il ici? Est-ce que j'utilise un opérateur incorrect?
ainsi, l'éditeur hexadécimal que j'ai utilisé pour regarder les données l'ont affiché comme 10000000. Je suppose qu'il a affiché le LSB en premier? et j'ai eu de la chance avec ma confusion dans le BitArray? – scottm
@ scott2012: Je ne peux pas parler pour votre éditeur hexadécimal, mais comment fonctionne BitArray - le bit le moins significatif est à l'index 0. Vous pouvez vérifier cela avec un court morceau de code: bits var = new BitArray (nouvel octet [] {0xf0}); // 11110000 pour (int idx = 0; idx <= 7; idx ++) Console.WriteLine ("{0}: {1}", idx, bits [idx]); –