Comment append un bit de parité pair sur un nombre binary 7 bits

Je continue de ma question précédente. Je crée un programme où l’utilisateur entre un nombre binary de 7 bits et l’ordinateur imprime le nombre avec un bit de parité pair à droite du nombre. Je me bats. J’ai un code, mais il dit que BitArray est un espace de noms mais est utilisé comme type. De plus, y a-t-il moyen d’améliorer le code et de le simplifier?

namespace BitArray { class Program { static void Main(ssortingng[] args) { Console.WriteLine("Please enter a 7-bit binary number:"); int a = Convert.ToInt32(Console.ReadLine()); byte[] numberAsByte = new byte[] { (byte)a }; BitArray bits = new BitArray(numberAsByte); int count = 0; for (int i = 0; i < 8; i++) { if (bits[i]) { count++; } } if (count % 2 == 1) { bits[7] = true; } bits.CopyTo(numberAsByte, 0); a = numberAsByte[0]; Console.WriteLine("The binary number with a parity bit is:"); Console.WriteLine(a); 

Il serait peut-être plus amusant de dupliquer le circuit utilisé pour le faire.

 bool odd = false; for(int i=6;i>=0;i--) odd ^= (number & (1 << i)) > 0; 

Ensuite, si vous souhaitez définir la parité paire, définissez le bit 7 sur impaire, impaire parité, impaire.

ou

 bool even = true; for(int i=6;i>=0;i--) even ^= (number & (1 << i)) > 0; 

Le circuit est double fonction retourne 0 et 1 ou 1 et 0, fait plus de 1 bit à la fois aussi, mais c’est un peu léger pour TPL ….

PS vous voudrez peut-être vérifier l’entrée <128 sinon les choses vont mal se passer.

ooh n’a pas remarqué l’étiquette de devoirs, ne l’utilisez pas à moins de pouvoir l’expliquer.

L’utilisation d’un BitArray ne vous achète pas beaucoup ici, si cela rend votre code plus difficile à comprendre. Votre problème peut être résolu avec une manipulation élémentaire de bits avec les & et | et << opérateurs.

Par exemple, pour savoir si un certain bit est défini dans un nombre, vous pouvez & le nombre avec la puissance correspondante de 2. Cela conduit à:

 int bitsSet = 0; for(int i=0;i<7;i++) if ((number & (1 << i)) > 0) bitsSet++; 

Maintenant, il ne rest plus qu'à déterminer si bitsSet est pair ou impair, puis à définir le bit restant si nécessaire.

Presque le même processus, mais beaucoup plus rapide sur un plus grand nombre de bits. En utilisant uniquement les opérateurs arithmétiques (SHR && XOR), sans boucles:

 public static bool is_parity(int data) { //data ^= data >> 32; // if arg >= 64-bit (notice argument length) //data ^= data >> 16; // if arg >= 32-bit //data ^= data >> 8; // if arg >= 16-bit data ^= data >> 4; data ^= data >> 2; data ^= data >> 1; return (data & 1) !=0; } public static byte fix_parity(byte data) { if (is_parity(data)) return data; return (byte)(data ^ 128); }