Skip to content
Related Articles

Related Articles

Improve Article

Count numbers whose difference with N is equal to XOR with N

  • Difficulty Level : Easy
  • Last Updated : 28 Apr, 2021

Given a number N. The task is to count all possible values of x such that n\oplus  x is equal to (N-x), where \oplus  denotes bitwise XOR operation.
Examples: 
 

Input: N = 3
Output: 4
The all possible values of x are respectively 0, 1, 2, 3.

Input: N = 6
Output: 4
The all possible values of x are respectively 0, 2, 4, 6.

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Approach: The XOR value of two bits will be 1 if both bits have opposite sign, and 0 when both bits are same. So on the basis of the property of XOR, we can say that n \oplus  x is always greater than or equal to n-x. The only condition when its value is equal with n-x is bits of x form a subset of bits of n. Because if in the i’th position both x and n has set bits then after xor the value will decrease, and the decreased value will be 2^{i}  , where i is 0-based position. 
So the answer is the total count of subsets of bits of number n is 2^{k}  , where k is the count of set bits in n.
Below is the implementation of above approach: 
 

C++




#include <bits/stdc++.h>
using namespace std;
 
// function to Count all values of x
void count_values(int n)
{
    // Count set bits in n
    // by using stl function
    int set_bits = __builtin_popcount(n);
 
    // count all subset of set bits
    cout << pow(2, set_bits) << "\n";
}
 
// Driver code
int main()
{
 
    int n = 27;
    count_values(n);
 
    return 0;
}

Java




import java.util.*;
 
class Solution
{
//count number of set bits
static int __builtin_popcount(int n)
{
    //count variable
    int count=0;
     
    while(n>0)
    {
        //if the bit is 1
        if(n%2==1)
        count++;
         
        n=n/2;
    }
    return count;
}
     
// function to Count all values of x
static void count_values(int n)
{
    // Count set bits in n
    // by using stl function
    int set_bits = __builtin_popcount(n);
   
    // count all subset of set bits
    System.out.println((int)Math.pow(2, set_bits));
}
   
// Driver code
public static void main(String args[])
{
   
    int n = 27;
    count_values(n);
   
 
}
}
 
// This code is contributed
// by Arnab Kundu

Python 3




# Python3 program to implement
# above approach
 
# from math import pow method
from math import pow
 
# count number of set bits
def __builtin_popcount(n) :
 
    # count variable
    count = 0
 
    while n > 0 :
 
        # if the bit is 1
        if n % 2 == 1 :
            count += 1
 
        n = n//2
         
    return count
 
 
# function to Count all values of x
def count_values(n) :
 
    set_bits = __builtin_popcount(n)
 
    # count all subset of set bits
    print(int(pow(2, set_bits)))
 
 
# Driver code
if __name__ == "__main__" :
 
    n = 27
    count_values(n)
 
# This code is contributed by
# ANKITRAI1

C#




using System;
class GFG
{
// count number of set bits
static int __builtin_popcount(int n)
{
    // count variable
    int count = 0;
     
    while(n > 0)
    {
        //if the bit is 1
        if(n % 2 == 1)
        count++;
         
        n = n / 2;
    }
    return count;
}
     
// function to Count all values of x
static void count_values(int n)
{
    // Count set bits in n
    // by using stl function
    int set_bits = __builtin_popcount(n);
     
    // count all subset of set bits
    Console.Write((int)Math.Pow(2, set_bits));
}
     
// Driver code
public static void Main()
{
    int n = 27;
    count_values(n);
}
}
 
// This code is contributed by Smitha

PHP




<?php
// count number of set bits
function __builtin_popcount($n)
{
    // count variable
    $count = 0;
     
    while($n > 0)
    {
        //if the bit is 1
        if($n % 2 == 1)
            $count++;
         
        $n = $n / 2;
    }
    return $count;
}
     
// function to Count all values of x
function count_values($n)
{
    // Count set bits in n
    // by using stl function
    $set_bits = __builtin_popcount($n);
 
    // count all subset of set bits
    echo (int)pow(2, $set_bits);
}
 
// Driver code
$n = 27;
count_values($n);
 
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>

Javascript




<script>
 
// count number of set bits
function __builtin_popcount(n)
{
    // count variable
    let count = 0;
     
    while(n > 0)
    {
        //if the bit is 1
        if(n % 2 == 1)
        count++;
         
        n = parseInt(n / 2);
    }
    return count;
}
 
// function to Count all values of x
function count_values(n)
{
    // Count set bits in n
    // by using stl function
    let set_bits = __builtin_popcount(n);
 
    // count all subset of set bits
    document.write(Math.pow(2, set_bits) + "<br>");
}
 
// Driver code
 
    let n = 27;
    count_values(n);
 
</script>
Output: 
16

 

Time Complexity: O(k), where k is number of set bits in N.
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :