颠倒二进制位

108 阅读1分钟

leetcode-cn.com/problems/re…

/**
 * @author wujin
 * @date 2021/3/29
 */
public class TTTT {
    public static void main(String[] args) {
        reverseBit(7, 3);// int 7 = 111
    }

    /**
     * 颠倒二进制
     * @param n 十进制数
     * @param length 二进制位数
     * @return
     */
    public static int reverseBit(int n, int length) {
        int rev = 0;
        for (int i = 0; i < length && n != 0; ++i) {
            System.out.println("n = " + n + ", i = " + i);
            // 取最后一位
            System.out.println("n & 1 = " + (n & 1));
            // 将最后一位位移到反转后的位置
            System.out.println("(n & 1) << (2 - i) = " + ((n & 1) << (length - 1 - i)));
            // 取之前反转结果和当前位之和
            rev |= (n & 1) << (length - 1 - i);
            System.out.println("n >>>= 1 = " + (n >>> 1) + "\n");
            // 去掉最后一位
            n >>>= 1;
        }
        System.out.println(rev);
        return rev;
    }
}