簡體   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