c - 寻找奇偶校验的程序

标签 c bit-manipulation bitwise-operators

我正在尝试计算设置为 1 的位数,但总数始终为 1(如果没有,则为 0) 我做错了什么?

typedef uint32_t uint;

uint hamm_parity(uint data)
{
    uint total = 0;
    uint i;

    for (i = 0; i < 32; i++)
    {
        if ((data & (1u << i)) == (1u << i))
            total++;
    }
    if (total % 2 == 0)
        return 0;
    else
        return 1;
}

我也尝试过:

if ((data >> i) & 1u)

还尝试将“1u”更改为 1 和变量

最佳答案

好吧,我发现了我的错误,我以更简单的方式在这里编写了代码,这样您就不需要上下文,但通过这样做,我隐藏了我的错误。

我没有在循环中使用 32,而是使用了一个常量,但我使用了错误的常量。 我傻了...

无论如何,感谢您的帮助!

关于c - 寻找奇偶校验的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60314053/

相关文章:

c - 在不使用 if 语句的情况下递减一个值并返回到最大值?

byte - 使用按位运算符判断一个数字是否为 2 的幂 [O(1)]

c - 如何知道线程内存使用情况?

更改链表中字符串的值

bit-manipulation - 使用 1 的补码生成显示第一个非零位的掩码

C++ 将 RGBA 打包为 unsigned int

PHP7 按负数移位将在 PHP 中抛出 ArithmeticError

c - 如何循环打开和关闭文件

c - 数组越界,索引-1

python - Python 中的快速按位获取列