【位运算技巧】与运算符(2)判断某数二进制位上是1还是0

【位运算技巧】与运算符(2)判断某数二进制位上是1还是0

一、题目

现有一个二进制数,如何快速判断某位(从右往左数)是0还是1?

二、题解

1.奇巧淫技

使用 与(&) 运算符。

1.1 方式一

这种方式比较简单易懂。

先将数字右移指定第i位,然后再用&与1运算

    public static int and2(int num, int i) {
        // 先将数字右移指定第i位,然后再用&与1运算
        return num >> (i-1) & 1;
    }
1.2 方式二

先将1左移到指定的第i位,然后在用与&判断是否是1。最后右移第i位回去。

    public static int and(int num, int i) {
        // 先将1左移到指定的第i位,然后在用与&判断是否是1。最后右移第i位回去。
        return (1 << (i-1) & num) >> (i-1);
    }

2.其他解法

整数转换成二进制字符字符串,再转成字符数组判断。

    public static int other(int num, int i) {
        String s = Integer.toBinaryString(num);
        char[] chars = s.toCharArray();
        int len = s.length();
        if (i <= len && i > 0) return chars[len-i] - 48;
        return 0;
    }