【Java】求一个整数,在内存当中存储时,二进制1的个数
发布日期:2021-05-08 21:34:19 浏览次数:21 分类:精选文章

本文共 1456 字,大约阅读时间需要 4 分钟。

计算二进制1的个数的两种高效方法

在编程中,计算一个整数的二进制表示中1的个数是一个常见的任务。以下两种方法可以帮助你快速实现这一目标。

第一种方法:逐位检查

方法思路

这种方法通过不断将整数除以2来逐位检查每一位是否为1。具体来说:

  • 初始化一个计数器count为0。
  • 使用循环不断将整数除以2。
  • 在每次循环中,检查当前位是否为1。
  • 如果是,将计数器加1。
  • 继续处理除以2的结果,直到整数变为0。
  • 代码示例

    public static void main(String[] args) {    Scanner sc = new Scanner(System.in);    int num = sc.nextInt();    int count = 0;    while (num != 0) {        if (num % 2 == 1) {            count++;        }        num /= 2;    }    System.out.println("该数二进制1的个数有" + count + "个");}

    代码解释

    • Scanner sc = new Scanner(System.in);:读取用户输入。
    • int num = sc.nextInt();:获取用户输入的整数。
    • int count = 0;:初始化计数器为0。
    • while (num != 0):当整数不为0时,继续循环。
    • if (num % 2 == 1):检查当前位是否为1。
    • count++;:如果是,将计数器加1。
    • num /= 2;:将整数除以2,继续处理下一位。
    • System.out.println("该数二进制1的个数有" + count + "个");:输出结果。

    第二种方法:利用位运算

    方法思路

    这种方法通过利用位运算来逐步移除1的最低有效位:

  • 初始化计数器count为0。
  • 使用循环不断将整数与其右移一位的结果进行按位与运算。
  • 每次循环,计数器加1。
  • 当整数变为0时,循环结束。
  • 代码示例

    public static void main(String[] args) {    Scanner sc = new Scanner(System.in);    int num = sc.nextInt();    int count = 0;    while (num != 0) {        count++;        num = num & (num - 1);    }    System.out.println("该数二进制1的个数有" + count + "个");}

    代码解释

    • Scanner sc = new Scanner(System.in);:读取用户输入。
    • int num = sc.nextInt();:获取用户输入的整数。
    • int count = 0;:初始化计数器为0。
    • while (num != 0):当整数不为0时,继续循环。
    • count++;:每次循环计数器加1。
    • num = num & (num - 1);:移除最低有效位,继续处理下一位。
    • System.out.println("该数二进制1的个数有" + count + "个");:输出结果。

    总结

    以上两种方法均可有效地计算一个整数的二进制表示中1的个数。第一种方法通过逐位检查,第二种方法则通过位运算优化,性能更高。选择哪种方法取决于具体需求和性能要求。

    上一篇:求两个数的最大公因数 求两个数的最小公倍数
    下一篇:Java模拟用户登录情景,并且只能登录3次,密码正确提示登录成功,如果三次都输入错误,则退出程序

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月05日 12时39分54秒