Finding the Parity of a number Efficiently

Given an integer N. The task is to write a program to find the parity of the given number.

Note: Parity of a number is used to define if the total number of set-bits(1-bit in binary representation) in a number is even or odd. If the total number of set-bits in the binary representation of a number is even then the number is said to have even parity, otherwise, it will have odd parity.

Examples:



Input : N = 13 
Output : Odd Parity
Bianry representation of 13 is (1101)

Input : N = 9 (1001)
Output : Even Parity

The parity of a number represented by 32-bits can be efficiently calculated by performing the following operations.

Let the given number be x, then perform the below operations:

  • y = x^(x>>1)
  • y = y^(y>>2)
  • y = y^(y>>4)
  • y = y^(y>>8)
  • y = y^(y>>16)

Now, the rightmost bit in y will represent the parity of x. If the rightmost bit is 1, then x will have odd parity and if it is 0 then x will have even parity.

So, in order to extract the last bit of y, perform bit-wise AND operation of y with 1.

if(y&1==1)
    odd Parity
else
    even Parity

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// Program to find the parity of a given number
#include <bits/stdc++.h>
  
using namespace std;
  
// Function to find the parity
bool findParity(int x)
{
    int y = x ^ (x >> 1);
    y = y ^ (y >> 2);
    y = y ^ (y >> 4);
    y = y ^ (y >> 8);
    y = y ^ (y >> 16);
  
    // Rightmost bit of y holds the parity value
    // if (y&1) is 1 then parity is odd else even
    if (y & 1)
        return 1;
    return 0;
}
  
// Driver code
int main()
{
    (findParity(9)==0)?cout<<"Even Parity\n":
                            cout<<"Odd Parity\n";
      
    (findParity(13)==0)?cout<<"Even Parity\n":
                            cout<<"Odd Parity\n";
      
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Program to find the
// parity of a given number
import java.io.*;
  
class GFG 
{
  
// Function to find the parity
static boolean findParity(int x)
{
    int y = x ^ (x >> 1);
        y = y ^ (y >> 2);
        y = y ^ (y >> 4);
        y = y ^ (y >> 8);
        y = y ^ (y >> 16);
  
    // Rightmost bit of y holds
    // the parity value
    // if (y&1) is 1 then parity 
    // is odd else even
    if ((y & 1) > 0)
        return true;
    return false;
}
  
// Driver code
public static void main (String[] args) 
{
    if((findParity(9) == false))
        System.out.println("Even Parity");
    else
        System.out.println("Odd Parity");
      
    if(findParity(13) == false)
        System.out.println("Even Parity");
    else
        System.out.println("Odd Parity");
}
}
  
// This Code is Contributed by chandan_jnu.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Program to find the
# parity of a given number
  
# Function to find the parity
def findParity(x):
    y = x ^ (x >> 1);
    y = y ^ (y >> 2);
    y = y ^ (y >> 4);
    y = y ^ (y >> 8);
    y = y ^ (y >> 16);
  
    # Rightmost bit of y holds 
    # the parity value if (y&1)
    # is 1 then parity is odd
    # else even
    if (y & 1):
        return 1;
    return 0;
  
# Driver code
if(findParity(9) == 0):
    print("Even Parity");
else:
    print("Odd Parity\n");
  
if(findParity(13) == 0):
    print("Even Parity");
else:
    print("Odd Parity");
      
# This code is contributed by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// Program to find the
// parity of a given number
using System;
  
class GFG 
{
  
// Function to find the parity
static bool findParity(int x)
{
    int y = x ^ (x >> 1);
        y = y ^ (y >> 2);
        y = y ^ (y >> 4);
        y = y ^ (y >> 8);
        y = y ^ (y >> 16);
  
    // Rightmost bit of y holds
    // the parity value
    // if (y&1) is 1 then parity 
    // is odd else even
    if ((y & 1) > 0)
        return true;
    return false;
}
  
// Driver code
public static void Main () 
{
    if((findParity(9) == false))
        Console.WriteLine("Even Parity");
    else
        Console.WriteLine("Odd Parity");
      
    if(findParity(13) == false)
        Console.WriteLine("Even Parity");
    else
        Console.WriteLine("Odd Parity");
}
}
  
// This Code is Contributed 
// by chandan_jnu

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// Program to find the
// parity of a given number
  
// Function to find the parity
function findParity($x)
{
    $y = $x ^ ($x >> 1);
    $y = $y ^ ($y >> 2);
    $y = $y ^ ($y >> 4);
    $y = $y ^ ($y >> 8);
    $y = $y ^ ($y >> 16);
  
    // Rightmost bit of y holds 
    // the parity value if (y&1)
    // is 1 then parity is odd
    // else even
    if ($y & 1)
        return 1;
    return 0;
}
  
// Driver code
(findParity(9) == 0) ? 
 print("Even Parity\n"):
 print("Odd Parity\n");
  
(findParity(13) == 0) ? 
print("Even Parity\n"):
print("Odd Parity\n");
      
// This Code is Contributed by mits
?>

chevron_right


Output:

Even Parity
Odd Parity


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.