Position of rightmost set bit

Last Updated : 5 Feb, 2026

Given an integer n, Return the position of the first set bit from right to left in the binary representation n. If no set bits present , then return 0.
Note: Position of rightmost bit is 1.

Examples:

Input: n = 18
Output: 2
Explanation: Binary representation of 18 is 10010, hence position of first set bit from right is 2.

Input:  n = 19
Output: 1
Explanation: Binary representation of 19 is 10011, hence position of first set bit from right is 1.

Try It Yourself
redirect icon

Using 2's complement and log Operator - O(log n) time and O(1) space

The idea is to find the rightmost set bit using a property of 2's complement arithmetic. When we perform n & (~n + 1) or equivalently n & (-n), we get a number with only the rightmost set bit of n. Then we can use log2 to find its position.

C++
#include <iostream>
#include <cmath>

using namespace std;

int getFirstSetBit(int n) {
    
    // If no set bit 
    if (n == 0) return 0;
    
    // Get the rightmost set bit
    int res = n & (~n + 1);
    
    // Find position using log2
    return log2(res) + 1;
}

int main() {
    int n = 18;
    cout << getFirstSetBit(n);
    return 0;
}
Java
import java.lang.Math;

class GfG {

    static int getFirstSetBit(int n) {
        
        // If no set bit 
        if (n == 0) return 0;
        
        // Get the rightmost set bit
        int res = n & (~n + 1);
        
        // Find position using log2
        return (int)(Math.log(res) / Math.log(2)) + 1;
    }

    public static void main(String[] args) {
        int n = 18;
        System.out.println(getFirstSetBit(n));
    }
}
Python
import math
def getFirstSetBit(n):
    
    # If no set bit 
    if n == 0:
        return 0
    
    # Get the rightmost set bit
    res = n & (~n + 1)
    
    # Find position using log2
    return int(math.log2(res)) + 1

if __name__ == "__main__":
    n = 18
    print(getFirstSetBit(n))
C#
using System;

class GfG {

    static uint getFirstSetBit(int n) {
        
        // If no set bit 
        if (n == 0) return 0;
        
        // Get the rightmost set bit
        int res = n & (~n + 1);
        
        // Find position using log2
        return (uint)(Math.Log(res) / Math.Log(2)) + 1;
    }

    static void Main() {
        int n = 18;
        Console.WriteLine(getFirstSetBit(n));
    }
}
JavaScript
function getFirstSetBit(n) {
    
    // If no set bit 
    if (n === 0) return 0;
    
    // Get the rightmost set bit
    let res = n & (~n + 1);
    
    // Find position using log2
    return Math.log2(res) + 1;
}
//Driver Code 
let n = 18;
console.log(getFirstSetBit(n));

Output
2

Using left shift operator - O(1) time and O(1) space

The idea is to use a counter and iteratively left-shift 1 to check each bit position. Increment a position counter until we find a bit that is set.

C++
#include <iostream>
using namespace std;

int getFirstSetBit(int n) {

    // If no set bit
    if (n == 0) return 0;

    int pos = 1;

    // Left shift a mask and check each bit
    while ((n & (1 << (pos - 1))) == 0) {
        pos++;
    }

    return pos;
}

int main() {
    int n = 18;
    cout << getFirstSetBit(n);
    return 0;
}
Java
class GFG {

    static int getFirstSetBit(int n) {

        // If no set bit
        if (n == 0) return 0;

        int pos = 1;

        // Left shift a mask and check each bit
        while ((n & (1 << (pos - 1))) == 0) {
            pos++;
        }

        return pos;
    }

    public static void main(String[] args) {
        int n = 18;
        System.out.println(getFirstSetBit(n));
    }
}
Python
def getFirstSetBit(n):

    # If no set bit
    if n == 0:
        return 0

    pos = 1

    # Left shift a mask and check each bit
    while (n & (1 << (pos - 1))) == 0:
        pos += 1

    return pos


n = 18
print(getFirstSetBit(n))
C#
using System;

class GFG {
    static int getFirstSetBit(int n) {

        // If no set bit
        if (n == 0) return 0;

        int pos = 1;

        // Left shift a mask and check each bit
        while ((n & (1 << (pos - 1))) == 0) {
            pos++;
        }

        return pos;


    static void Main() {
        int n = 18;
        Console.WriteLine(getFirstSetBit(n));
    }
}
JavaScript
function getFirstSetBit(n) {

    // If no set bit
    if (n === 0) return 0;

    let pos = 1;

    // Left shift a mask and check each bit
    while ((n & (1 << (pos - 1))) === 0) {
        pos++;
    }

    return pos;
}

let n = 18;
console.log(getFirstSetBit(n));

Output
2

Using right shift operator - O(1) time and O(1) space

The idea is to right-shift the number and check the least significant bit in each iteration. Increment a position counter until we find a bit that is set.

C++
#include <bits/stdc++.h>
using namespace std;

int getFirstSetBit(int n) {
    
    // If no set bit 
    if (n == 0) return 0;
    
    int res = 1;
    
    // Right shift and check LSB
    while (!(n & 1)) {
        n = n >> 1;
        res++;
    }
    
    return res;
}

int main() {
    int n = 18;
    cout << getFirstSetBit(n);
    return 0;
}
Java
// Java program to find the position of right most 
// set bit in an integer.

class GfG {

    static int getFirstSetBit(int n) {
        
        // If no set bit 
        if (n == 0) return 0;
        
        int res = 1;
        
        // Right shift and check LSB
        while ((n & 1) == 0) {
            n = n >> 1;
            res++;
        }
        
        return res;
    }

    public static void main(String[] args) {
        int n = 18;
        System.out.println(getFirstSetBit(n));
    }
}
Python
def getFirstSetBit(n):
    
    # If no set bit 
    if n == 0:
        return 0
    
    res = 1
    
    # Right shift and check LSB
    while (n & 1) == 0:
        n = n >> 1
        res += 1
    
    return res

if __name__ == "__main__":
    n = 18
    print(getFirstSetBit(n))
C#
using System;

class GfG {

    static uint getFirstSetBit(int n) {
        
        // If no set bit 
        if (n == 0) return 0;
        
        uint res = 1;
        
        // Right shift and check LSB
        while ((n & 1) == 0) {
            n = n >> 1;
            res++;
        }
        
        return res;
    }

    static void Main() {
        int n = 18;
        Console.WriteLine(getFirstSetBit(n));
    }
}
JavaScript
function getFirstSetBit(n) {
    
    // If no set bit 
    if (n === 0) return 0;
    
    let res = 1;
    
    // Right shift and check LSB
    while ((n & 1) === 0) {
        n = n >> 1;
        res++;
    }
    
    return res;
}

let n = 18;
console.log(getFirstSetBit(n));

Output
2

Using Built-In Library Functions - O(1) time and O(1) space

C++
#include <bits/stdc++.h>
using namespace std;

int getFirstSetBit(int n) {
    
    // If no set bit 
    if (n == 0) return 0;
    
    return __builtin_ffs(n);
}

int main() {
    int n = 18;
    cout << getFirstSetBit(n);
    return 0;
}
Java
// Java program to find the position of right most 
// set bit in an integer.

class GfG {

    static int getFirstSetBit(int n) {
        
        // If no set bit 
        if (n == 0) return 0;
        
        return Integer.numberOfTrailingZeros(n) + 1;
    }

    public static void main(String[] args) {
        int n = 18;
        System.out.println(getFirstSetBit(n));
    }
}
Python
# Python program to find the position of right most 
# set bit in an integer.

def getFirstSetBit(n):
    
    # If no set bit 
    if n == 0:
        return 0
    
    return (n & -n).bit_length()

if __name__ == "__main__":
    n = 18
    print(getFirstSetBit(n))

Output
2


Comment