C++ 十进制奇偶校验

C++ 十进制奇偶校验,c++,function,loops,parity,C++,Function,Loops,Parity,我想在循环中使用奇偶校验函数来生成每秒发生一次的事件。但是我发现所有监视奇偶校验的函数都不起作用 即使是最简单的,比如: unsigned int v; bool parity = false; while (v) { parity = !parity; v = v & (v - 1); } 可以给我一个奇数和偶数的相同值 如何做好?或者,有没有其他方法可以让循环中的每一轮都发生一次事件?试试以下方法: bool isEven = ((v % 2) == 0

我想在循环中使用奇偶校验函数来生成每秒发生一次的事件。但是我发现所有监视奇偶校验的函数都不起作用

即使是最简单的,比如:

unsigned int v;       
bool parity = false;  

while (v)
{
  parity = !parity;
  v = v & (v - 1);
}
可以给我一个奇数和偶数的相同值

如何做好?或者,有没有其他方法可以让循环中的每一轮都发生一次事件?

试试以下方法:

bool isEven = ((v % 2) == 0);
这假设v是要测试均匀性的变量。这是

试试这个:

bool isEven = ((v % 2) == 0);

这假设v是要测试均匀性的变量。这是

你似乎误解了奇偶校验的含义,因为它通常在计算机世界中使用。如果v的二进制表示具有偶数个设置位,那么您显示的代码将奇偶校验设置为false,如果具有奇数个设置位,则将奇偶校验设置为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答案中使用的%表达式。

您似乎误解了奇偶校验的含义,因为它通常在计算机世界中使用。如果v的二进制表示具有偶数个设置位,那么您显示的代码将奇偶校验设置为false,如果具有奇数个设置位,则将奇偶校验设置为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答案中使用的%表达式。

一般来说,为什么偶数和奇数不应该具有相同的奇偶校验?如果v中设置了奇数位数,则您发布的循环将奇偶校验设置为true-如果v为奇数,则不会。一般来说,为什么,偶数和奇数是否应该具有相同的奇偶校验?如果在v中设置了奇数位数,则您发布的循环将奇偶校验设置为true-如果v是奇数,则不会设置为true。@ZoltánSchmidt太棒了!我看你是新来的。通常,如果答案解决了您的问题,建议您勾选旁边的绿色复选标记。但是别担心!如果有更好的答案出现,你可以稍后改变主意,选择不同的答案!是的,我是新来的,但我很高兴我能很快得到答案。@ZoltánSchmidt太棒了!我看你是新来的。通常,如果答案解决了您的问题,建议您勾选旁边的绿色复选标记。但是别担心!如果有更好的答案出现,你可以稍后改变主意,选择不同的答案!是的,我是新来的,但我很高兴我能很快得到答案。哦,真的。我不知道。哦,真的。我不知道。