Open In App

Find average of two numbers using bit operation

Last Updated : 30 May, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two integers x and y, the task is to find the average of these numbers i.e. (x + y) / 2 using bit operations. Note that this method will give result as floor value of the calculated average.
Examples: 
 

Input: x = 2, y = 4 
Output:
(2 + 4) / 2 = 3
Input: x = 10, y = 9 
Output:
 


 


Approach: Average of two numbers x and y can be calculated using bit operations as: 
 

(x & y) + ((x ^ y) >> 1) 
 


where & is bitwise AND, ^ is bitwise XOR and >> 1 is right shift by 1 bit.
Below is the implementation of the above approach:
 

C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;

// Function to return the average
// of x and y using bit operations
int getAverage(int x, int y)
{
    // Calculate the average
    // Floor value of (x + y) / 2
    int avg = (x & y) + ((x ^ y) >> 1);

    return avg;
}

// Driver code
int main()
{
    int x = 10, y = 9;

    cout << getAverage(x, y);

    return 0;
}
Java
// Java implementation of the approach
class GFG {

    // Function to return the average
    // of x and y using bit operations
    static int getAverage(int x, int y)
    {

        // Calculate the average
        // Floor value of (x + y) / 2
        int avg = (x & y) + ((x ^ y) >> 1);

        return avg;
    }

    // Driver code
    public static void main(String[] args)
    {
        int x = 10, y = 9;

        System.out.print(getAverage(x, y));
    }
}
Python
# Python 3 implementation of the approach 

# Function to return the average 
# of x and y using bit operations
def getAverage(x, y):

    # Calculate the average
    # Floor value of (x + y) / 2
    avg = (x & y) + ((x ^ y) >> 1);
    
    return avg

# Driver code
x = 10
y = 9
print(getAverage(x, y))
C#
// C# implementation of the approach 
using System;

class GFG 
{ 

    // Function to return the average 
    // of x and y using bit operations 
    static int getAverage(int x, int y) 
    { 

        // Calculate the average 
        // Floor value of (x + y) / 2 
        int avg = (x & y) + ((x ^ y) >> 1); 

        return avg; 
    } 

    // Driver code 
    public static void Main() 
    { 
        int x = 10, y = 9; 

        Console.WriteLine(getAverage(x, y)); 
    } 
} 

// This code is contributed by AnkitRai01
PHP
<?php
// PHP implementation of the approach

// Function to return the average
// of x and y using bit operations
function getAverage($x, $y)
{
    // Calculate the average
    // Floor value of (x + y) / 2
    $avg = ($x & $y) + (($x ^ $y) >> 1);

    return $avg;
}

// Driver code
    $x = 10;
    $y = 9;

    echo getAverage($x, $y);

// This code is contributed by ajit.
?>
JavaScript
<script>
// javascript implementation of the approach    

    // Function to return the average
    // of x and y using bit operations
    function getAverage(x , y) 
    {

        // Calculate the average
        // Floor value of (x + y) / 2
        var avg = (x & y) + ((x ^ y) >> 1);

        return avg;
    }

    // Driver code
    var x = 10, y = 9;
    document.write(getAverage(x, y));

// This code is contributed by Rajput-Ji
</script>

Output: 
9

 

Time Complexity: O(1)

Auxiliary Space: O(1)


Next Article

Similar Reads