美文网首页
判断int型数据中有多少位是1的两种解法

判断int型数据中有多少位是1的两种解法

作者: 雨夜都行 | 来源:发表于2020-04-28 23:16 被阅读0次

直接上代码,代码中注释标出算法的特点

package EveryTest.EveryBasic;

/**
 *
 * 统计int型数据中有多位是1
 *
 * @author
 * @date 2020/4/28
 */
public class BinaryTest {

    public static void main(String[] args) {

        int num = 11;

        int count1 = countIntBinaryBitIsOneMethod1(num);
        System.out.println(count1);

        int count2 = countIntBinaryBitIsOneMethod2(num);
        System.out.println(count2);
    }

    /**
     *
     * 第一种算法,根据向右移的特点,如果移掉的是1,那么未移动前的数据就是新数据的2倍+1
     *
     * 缺陷:
     * 由于最高位是符号位,如果最高位时1的话,那么通过这种算法进行计算会出现错误结果
     * @param num
     * @return
     */
    private static int countIntBinaryBitIsOneMethod1(int num) {
        int count = 0;
        int temp;

        while (true) {
            if (num == 0) {
                break;
            }
            if (num == 1) {
                count++;
                break;
            }

            temp = num;
            num = num >> 1;

            // 判断被移走的那一位二进制位是否为1
            if (2 * num + 1 == temp) {
                count++;
            }
        }

        return count;
    }

    /**
     * 第二种算法,根据&按位与的特点,那数字与1进行&,如果还是1,那么说明最低位是1
     * @param num
     * @return
     */
    private static int countIntBinaryBitIsOneMethod2(int num) {
        int count = 0;

        while (true) {
            if (num == 0) {
                break;
            }
            if ((num & 1) == 1) {
                count++;
            }

            num = num >> 1;
        }

        return count;
    }
}
----------------------------
运行结果:
3
3

相关文章

网友评论

      本文标题:判断int型数据中有多少位是1的两种解法

      本文链接:https://www.haomeiwen.com/subject/traiwhtx.html