ความเท่าเทียมกันของตัวเลขขึ้นอยู่กับจำนวน 1 ที่มีอยู่ในเลขฐานสองของตัวเลขนั้น เมื่อการนับ 1s ปัจจุบันเป็นเลขคี่ จะส่งกลับค่าความเท่าเทียมกันของคี่ สำหรับจำนวนคู่ที่ 1 จะคืนค่าความเท่าเทียมกัน
อย่างที่เราทราบดีว่าตัวเลขในหน่วยความจำของคอมพิวเตอร์นั้นถูกจัดเก็บเป็นเลขฐานสอง เราจึงสามารถเปลี่ยนตัวเลขได้อย่างง่ายดาย ในกรณีนี้ โดยการขยับบิต เราจะนับจำนวน 1 ที่มีอยู่ในเลขฐานสองของตัวเลขที่ระบุ
อินพุตและเอาต์พุต
Input: A number: 5 Binary equivalent is (101) Output: Parity of 5 is Odd.
อัลกอริทึม
finParity(n)
ป้อนข้อมูล: หมายเลข n.
ผลลัพธ์: ตรวจสอบว่าตัวเลขมีความเท่าเทียมกันหรือความเท่าเทียมกันของคี่
Begin count := 0 temp := n while temp >= 2, do if temp has 1 as LSb, then count := count + 1 temp := right shift temp for 1 bit done if count is odd number, then display it is odd parity else display even parity End
ตัวอย่าง
#include <iostream>
using namespace std;
bool findParity(int n) {
int count = 0;
int temp = n;
while (temp>=2) {
if(temp & 1) //when LSb is 1, increase count
count++;
temp = temp >> 1; //right shift number by 1 bit
}
return (count % 2)?true:false;
}
int main() {
int n;
cout << "Enter a number: "; cin >>n;
cout << "Parity of " << n << " is " << (findParity(n)?"Odd":"Even");
} ผลลัพธ์
Enter a number: 5 Parity of 5 is Odd