首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在7位二进制数上添加偶校验位

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

Stack Overflow用户
提问于 2012-02-07 03:13:40
回答 3查看 3.4K关注 0票数 1

我从上一个问题继续。我正在编写一个c#程序,用户输入一个7位二进制数,计算机打印出数字右侧的偶数奇偶校验位。我在挣扎。我有一段代码,但它说明BitArray是一个名称空间,但被用作类型。另外,有没有办法改进代码,让它变得更简单?

代码语言:javascript
复制
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);
EN

回答 3

Stack Overflow用户

发布于 2012-02-07 04:09:31

复制他们用来做这件事的电路可能会更有趣。

代码语言:javascript
复制
bool odd = false;

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

然后,如果您想要偶数奇偶校验设置位7为奇数,奇数奇偶校验设置为非奇数。

代码语言:javascript
复制
bool even = true;

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

该电路是对偶函数,返回0和1或1和0,也可以一次处理超过1位,但这对TPL来说有点轻...

PS你可能想要检查输入是否小于128,否则事情会变得很糟糕。

哦,没有注意到家庭作业标签,除非你能解释清楚,否则不要使用它。

票数 2
EN

Stack Overflow用户

发布于 2013-05-24 17:44:01

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

代码语言:javascript
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2012-02-07 03:23:07

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

例如,要找出某一位是否被设置在一个数字中,你可以&该数字的相应幂为2。这将导致:

代码语言:javascript
复制
int bitsSet = 0;
for(int i=0;i<7;i++)
    if ((number & (1 << i)) > 0)
        bitsSet++;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9165808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档