我想在循環中使用奇偶校驗函數來每隔一次發生一次事件。但是我發現觀看比價的所有功能都不起作用。十進制奇偶校驗
即使是最簡單的,就像這樣:
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