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
Binary 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.