package cn.iocoder.yudao.framework.common.thealgorithms.bitmanipulation;

///**
// * Find The Index Of Right Most SetBit
// * @author Bama Charan Chhandogi (https://github.com/BamaCharanChhandogi)
// */
//
//public final class IndexOfRightMostSetBit {
//    private IndexOfRightMostSetBit() {
//    }
//    public static int indexOfRightMostSetBit(int n) {
//        if (n == 0) {
//            return -1; // No set bits
//        }
//
//        // Handle negative numbers by finding the two's complement
//        if (n < 0) {
//            n = -n;
//            n = n & (~n + 1); // Get the rightmost set bit in positive form
//        }
//
//        int index = 0;
//        while ((n & 1) == 0) {
//            n = n >> 1;
//            index++;
//        }
//
//        return index;
//    }
//}

/**
 * 查找最右边设置位的索引
 * @作者 Bama Charan Chhandogi (https://github.com/BamaCharanChhandogi)
 */

public final class IndexOfRightMostSetBit {
    private IndexOfRightMostSetBit() {
    }

    // 查找最右边设置位的索引
    public static int indexOfRightMostSetBit(int n) {
        // 如果 n 为 0，则没有设置位
        if (n == 0) {
            return -1;
        }

        // 处理负数，通过找到二进制补码
        if (n < 0) {
            n = -n;
            n = n & (~n + 1); // 获取正数形式的最右边设置位
        }

        // 初始化索引
        int index = 0;
        // 当 n 的最右边位不是 1 时，右移 n 并增加索引
        while ((n & 1) == 0) {
            n = n >> 1;
            index++;
        }

        // 返回最右边设置位的索引
        return index;
    }
}
