Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 奇偶校验如何找到偶数或奇数1';有点吗?_C_Bit Manipulation - Fatal编程技术网

C 奇偶校验如何找到偶数或奇数1';有点吗?

C 奇偶校验如何找到偶数或奇数1';有点吗?,c,bit-manipulation,C,Bit Manipulation,我想知道第1位的数字是奇数还是偶数。 代码如下: int odd_ones(unsigned x) { x ^= x >> 16; x ^= x >> 8; x ^= x >> 4; x ^= x >> 2; x ^= x >> 1; return !(x&1); } 但我不知道它是如何工作的;我在这方面已经坚持了很长时间。试着在做了x^=x>>16之后证明这一点x的最后16位

我想知道第1位的数字是奇数还是偶数。 代码如下:

int odd_ones(unsigned x)
{

    x ^= x >> 16;
    x ^= x >> 8;
    x ^= x >> 4;
    x ^= x >> 2;
    x ^= x >> 1;
    return !(x&1);
}

但我不知道它是如何工作的;我在这方面已经坚持了很长时间。

试着在做了
x^=x>>16之后证明这一点
x的最后16位将具有与原始值
x
相同的
1
s奇偶校验(假设x为32位)。然后在执行
x^=x>>8之后
x的最后8位将具有与操作前x的最后16位相同的
1
-s奇偶校验。通常,当您执行
x^=x>>L
时,结果的最后
L
位将具有与原始值x的最后
2*L
位中
1
s的奇偶校验相同的
1
s奇偶校验

试着证明在做了
x^=x>>16
x的最后16位将具有与原始值
x
相同的
1
s奇偶校验(假设x为32位)。然后在执行
x^=x>>8之后
x的最后8位将具有与操作前x的最后16位相同的
1
-s奇偶校验。通常,当您执行
x^=x>>L
时,结果的最后
L
位将具有与原始值x的最后
2*L
位中
1
s的奇偶校验相同的
1
s奇偶校验

下面是8位奇偶校验发生器的电路图
您的代码尝试将此组合电路实现为顺序逻辑(32位)。
想象一下这个电路的工作情况将有助于您理解代码

上述电路(即8位电路)的等效代码为:

int odd_ones(unsigned x)
{
    x ^= x >> 1;
    x ^= x >> 2;
    x ^= x >> 4;
    return !(x&1);
}

图像

以下是8位奇偶校验发生器的电路图
您的代码尝试将此组合电路实现为顺序逻辑(32位)。
想象一下这个电路的工作情况将有助于您理解代码

上述电路(即8位电路)的等效代码为:

int odd_ones(unsigned x)
{
    x ^= x >> 1;
    x ^= x >> 2;
    x ^= x >> 4;
    return !(x&1);
}

图像礼貌

你知道什么是
>
&
^
吗?如果没有,这就是为什么你没有得到它,如果是,告诉我们你卡在哪里。>>代表正确的衬衫和^代表XOR。我在“位表示”下写下了所有内容,它给出了真实的答案,但我不知道它如何给出它???
odd\u one()
返回与我期望的函数相反的值,例如:
odd\u one(0)
-->1和
odd\u one(1)
-->0。我想把这个函数重命名为偶数奇偶校验()。你知道
>
&
^
是什么吗?如果没有,这就是为什么你没有得到它,如果是,告诉我们你卡在哪里。>>代表正确的衬衫和^代表XOR。我在“位表示”下写下了所有内容,它给出了真实的答案,但我不知道它如何给出它???
odd\u one()
返回与我期望的函数相反的值,例如:
odd\u one(0)
-->1和
odd\u one(1)
-->0。我想重命名这个函数
is_even_parity()
。现在我了解了一点,但我如何证明在执行x^=x>>L之后,结果的最后L位将具有与最后2*L中的1s奇偶校验相同的1s奇偶校验?这是一个很好的位操作练习。如果我给你答案,对你没有好处。好吧,这是CSAPP的,这次我会想得更仔细。感谢您的帮助,因为1^1=0,所以当我在x^=x>>L中使用XOR时,它只需删除位1的2*i编号。这就是为什么最后的L位具有与x相同的奇偶校验。现在我了解了一点,但我如何证明在执行x^=x>>L之后,结果的最后L位将具有与最后2*L中的1s奇偶校验相同的1s奇偶校验?这是一个很好的位操作练习。如果我给你答案,对你没有好处。好吧,这是CSAPP的,这次我会想得更仔细。感谢您的帮助,因为1^1=0,所以当我在x^=x>>L中使用XOR时,它只需删除位1的2*i编号。这就是为什么最后的L位具有相同的x奇偶校验。