繁体   English   中英

如何在7位二进制数上添加偶校验位

[英]How to add even parity bit on 7-bit binary number

我从上一个问题继续。 我正在制作一个ac#程序,其中用户输入7位二进制数,然后计算机打印出该数字,并在该数字的右边加上一个偶校验位。 我在挣扎。 我有一个代码,但是它说BitArray是一个命名空间,但被用作类型。 另外,有什么方法可以改善代码并使之更简单?

namespace BitArray
{
    class Program
    {    
        static void Main(string[] 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);

复制他们用来执行此操作的电路可能会更有趣。

bool odd = false;

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

然后,如果要偶校验将位7设置为奇数,将奇校验设置为不奇数。

要么

bool even = true;

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

该电路是双功能电路,返回0和1或1和0,一次也执行1位以上的操作,但这对于TPL来说有点光。

PS,您可能想检查输入是否小于128,否则会出错。

哦,没有注意到作业标签,除非可以解释,否则不要使用它。

几乎相同的过程,但在大量位数上却要快得多。 仅使用算术运算符(SHR && XOR),不带循环:

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);
}

在这里使用BitArray不会给您带来很多好处,如果有的话,它会使您的代码更难以理解。 您可以通过&|基本位操作来解决您的问题| <<运算符。

例如,要确定数字中是否设置了某个位,您可以&将该数字与2的幂次幂相乘。这将导致:

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

现在剩下的唯一事情就是确定bitsSet是偶数还是奇数,然后在必要时设置剩余的位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM