Problem
Compute the parity of an integer
Solution
- Erases the least significant bit of a number
e.g 1111 -> 1111 & 1110 = 1110
1110 -> 1110 & 1101 = 1100
1101 -> 1101 & 1100 = 1100
1100 -> 1100 & 1011 = 1000
1011 -> 1011 & 1010 = 1010
1010 -> 1010 & 1001 = 1000
/*
============================================================================
Author : James Chen
Email : a.james.chen@gmail.com
Description : Computer parity
Created Data : 18-06-2013
Last Modified :
============================================================================
*/
#include <iostream>
#include <iomanip>
using namespace std;
bool IsOdd(long num)
{
int count = 1;
while (num != 0)
{
count ^= 1;
num = num & (num - 1);
}
return (count == 0) ? true : false;
}
int main(int argc, char* argv[])
{
for(int i = 0; i < 100; ++i){
bool odd = IsOdd(i);
cout << setw(4) << i;
if(odd){
cout << " has odd parity." << endl;
}
else{
cout << " has Even parity." << endl;
}
}
return 0;
}
Output
0 has Even parity.
1 has odd parity.
2 has odd parity.
3 has Even parity.
4 has odd parity.
5 has Even parity.
6 has Even parity.
7 has odd parity.
8 has odd parity.
9 has Even parity.
10 has Even parity.
11 has odd parity.
12 has Even parity.
13 has odd parity.
14 has odd parity.
15 has Even parity.
16 has odd parity.
17 has Even parity.
18 has Even parity.
19 has odd parity.
20 has Even parity.
21 has odd parity.
22 has odd parity.
23 has Even parity.
24 has Even parity.
25 has odd parity.
26 has odd parity.
27 has Even parity.
28 has odd parity.
29 has Even parity.
30 has Even parity.
31 has odd parity.
32 has odd parity.
33 has Even parity.
34 has Even parity.
35 has odd parity.
36 has Even parity.
37 has odd parity.
38 has odd parity.
39 has Even parity.
40 has Even parity.
41 has odd parity.
42 has odd parity.
43 has Even parity.
44 has odd parity.
45 has Even parity.
46 has Even parity.
47 has odd parity.
48 has Even parity.
49 has odd parity.
50 has odd parity.
51 has Even parity.
52 has odd parity.
53 has Even parity.
54 has Even parity.
55 has odd parity.
56 has odd parity.
57 has Even parity.
58 has Even parity.
59 has odd parity.
60 has Even parity.
61 has odd parity.
62 has odd parity.
63 has Even parity.
64 has odd parity.
65 has Even parity.
66 has Even parity.
67 has odd parity.
68 has Even parity.
69 has odd parity.
70 has odd parity.
71 has Even parity.
72 has Even parity.
73 has odd parity.
74 has odd parity.
75 has Even parity.
76 has odd parity.
77 has Even parity.
78 has Even parity.
79 has odd parity.
80 has Even parity.
81 has odd parity.
82 has odd parity.
83 has Even parity.
84 has odd parity.
85 has Even parity.
86 has Even parity.
87 has odd parity.
88 has odd parity.
89 has Even parity.
90 has Even parity.
91 has odd parity.
92 has Even parity.
93 has odd parity.
94 has odd parity.
95 has Even parity.
96 has Even parity.
97 has odd parity.
98 has odd parity.
99 has Even parity.
Press any key to continue . . .