我想在循环中使用奇偶校验函数来每隔一次发生一次事件。但是我发现观看比价的所有功能都不起作用。十进制奇偶校验
即使是最简单的,就像这样:
unsigned int v;
bool parity = false;
while (v)
{
parity = !parity;
v = v & (v - 1);
}
能给我相同的值偶数和奇数。
如何做得很好?或者,也许还有其他方法可以让循环中的每一轮都发生一次事件吗?
我想在循环中使用奇偶校验函数来每隔一次发生一次事件。但是我发现观看比价的所有功能都不起作用。十进制奇偶校验
即使是最简单的,就像这样:
unsigned int v;
bool parity = false;
while (v)
{
parity = !parity;
v = v & (v - 1);
}
能给我相同的值偶数和奇数。
如何做得很好?或者,也许还有其他方法可以让循环中的每一轮都发生一次事件吗?
看起来好像你误解了“平价”的含义,因为它通常在计算机世界中使用。你的代码已经证明套parity
到false
如果v
二进制表示有偶数个位集,并true
如果有奇数个置位。奇偶校验的概念与v
本身无关。一些例子:
Number (base 10) Number (base 2) Parity
0 0 0
1 1 1
2 10 1
3 11 0
4 100 1
5 101 0
6 110 0
7 111 1
. . .
. . .
. . .
12498741 1101 1110 1101 0111 0011 0101 0
. . .
. . .
. . .
如果你确实想检查一个数字是偶数或奇数,你可以使用:
bool odd = v & 1;
bool even = !(v & 1);
,对等同于@ user1118321的答案使用的%
表达。
哦的确如此。我不知道。 – 2013-04-29 21:19:25
完美的作品! 谢谢。 =) – 2013-04-28 01:57:33
@ZoltánSchmidt太棒了!我看到你是新来的。一般来说,如果答案解决了问题,建议您检查旁边的绿色复选标记。 (但是不用担心,如果有更好的答案出现,你可以改变主意并选择不同的答案!) – user1118321 2013-04-28 02:10:39
是的,我是新来的,但我很高兴能够很快得到答案。 – 2013-04-29 21:20:16
为什么一般情况下,偶数和奇数不具有相同的奇偶性? – 2013-04-28 02:04:16
如果在'v'中设置了奇数位,则发布的循环会将'parity'设置为true - 如果'v'为奇数则不会。 – 2013-04-28 02:05:33