我想在循环中使用奇偶校验功能来制作每秒钟发生一次的事件。但是我发现所有用于观察奇偶校验的功能都不起作用。
即使是最简单的,像这样:
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 的答案中使用的表达式。