求一个数的二进制中有多少了 1 的三种算法 ——Java篇

文章目录

  • 求一个数的二进制中有多少了 1 的三种算法 ——Java篇
    • 算法一:通过取模 % 运算就取出每一比特位数值,再判断
      • 思路:
      • 代码:
      • 结果:
    • 算法二:通过 移位 运算符,再 & 运算判断
      • 思路:
      • 代码:
      • 结果:
    • 算法三:**n & (n-1)** 的次数直到为 0 的 逻辑与运算的次数
      • 思路:
      • 代码:
      • 结果:
    • 总结:
    • 最后:
      • 每博一文案

  • 如图:

  • 判断一个数值的二进制中包含有多少个 1


算法一:通过取模 % 运算就取出每一比特位数值,再判断

思路:

  • 通过取模 num % 2 == 1 运算取出该数的每一个二进制位数,再判断是否等于 1;
  • 我们定义一个变量计数:
  • 再通过 num /= 2; 的方式位移其数值的一个比特位;
  • 最后打印数值

代码:


import java.util.Scanner;
public class Study15 {// 算法一: 通过取模 % 运算就取出每一比特位数值,再判断public static void main (String[] args) {Scanner scanner = new Scanner (System.in);int count = 0;if(scanner.hasNextInt()) {int num = scanner.nextInt();while(num > 0) {if(num % 2 == 1) {count++;}num /= 2;}System.out.println("一共有"+count+"数");}scanner.close();}}

结果:


算法二:通过 移位 运算符,再 & 运算判断

思路:

  • 主要核心:通过 if( ( ( num >> i) & 1 ) == 1 )

  • 首先循环 >> 移位,再 与 &(与运算) 1,取出每一个比特位,再判断是否为 1 ;

  • 详解看图:

  • 通过图我们可以发现,& 1 运算可以取出第一个比特位的数值:

  • 注意我们这里是 Int类型的数值,所以一共有 32 个比特位;

代码:


import java.util.Scanner;
public class Study15 {//    算法二:通过 移位运算符,再 & 运算判断public static void main (String[] args) {Scanner scanner = new Scanner (System.in);int count = 0; // 计数if(scanner.hasNextInt()) {int num = scanner.nextInt();for (int i = 0; i < 32; i++) {if( ((num >> i) & 1 ) == 1) {count++;}}System.out.println("一共有"+count+"个 1");}scanner.close(); // 关闭 IO 流,代码好习惯;}
}

结果:


算法三:n & (n-1) 的次数直到为 0 的 逻辑与运算的次数

思路:

  • 通过 n & (n-1) 的次数,判断其数值的二进制中存在多少了 1;

  • 从上述图中我们可以发现,**n & ( n-1 )**运算直到为零的时候结束,其中进行 & 与运算的次数刚好就是其中

  • 数值二进制中所含的数值 1 的个数

  • 如果你认为是巧合的话,你可以拿其他数值计算一下的


代码:

import java.util.Scanner;
public class Study15 {// 算法三:通过n & (n-1) 的次数public static void main (String[] args) {Scanner scanner = new Scanner (System.in);int count = 0;if(scanner.hasNextInt()) {int num = scanner.nextInt();while(num !=0) {num = num & (num -1);count++;}System.out.println("该数二进制的 1 的个数是:"+count);}scanner.close(); // 关闭 IO流,代码好习惯}
}

结果:


总结:

  • 其前两种的算法,都是取出每一个比特位的数值,再判断是否为 1 ,只是方式不一样而已,但是目的都是一样的取出每个比特位,判断。
  • 最后一种算法,就是一种数学上的某种规律的方法,巧妙地计算其个数,速度也是最快的

最后:

每博一文案

知心是我知道你的心,这种关系难能可贵,所以才更应该珍惜,珍惜那个下雨天问你打伞的人,因为他宁愿淋湿,也要伞下有个米

​ —————— 一禅心灵庙语

限于自身水平,其中存在的错误 希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!

求一个数的二进制中有多少了 1 的三种算法 ——Java篇相关推荐

  1. 求多个数的最大公约数和最小公倍数,用三种方法实现。

    题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整数最大公约 ...

  2. 通过C语言“求俩个数的二进制不同位的个数”

    Hellow,我是jack,今天给大家分享的是C语言实现求俩个数的二进制不同位的个数.话不多说,让我们直接进入正题. 首先,我们应该想到要求俩个不同数的二进制位的不同个数,我们就需要通过或运算符进行实 ...

  3. C++返回一个数的二进制最右边的一位的实现算法(附完整源码)

    C++返回一个数的二进制最右边的一位的实现算法 C++返回一个数的二进制最右边的一位的实现算法完整源码(定义,实现,main函数测试) C++返回一个数的二进制最右边的一位的实现算法完整源码(定义,实 ...

  4. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数

    第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...

  5. c语言求最小公倍数和最大公约数三种算法

    C语言求最小公倍数和最大公约数三种算法(经典) 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b ...

  6. C语言求最小公倍数和最大公约数三种算法(经典)

    C语言求最小公倍数和最大公约数三种算法(经典) 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为 ...

  7. 求最大公因数的三种算法及简要说明

    求最大公因数的三种算法及简要说明 1.连续整数法 从给定的最小的数开始按1递减,直至找到一个能被两者都整除的数. public static int gcd1(int x, int y){int mi ...

  8. 求素数的三大算法 —— Java 篇

    求素数的三大算法 -- Java 篇 文章目录 求素数的三大算法 -- Java 篇 算法一 :暴力遍历 思路: 代码: 结果: 算法二:折半范围遍历 思路: 代码: 结果: 算法三:根号范围遍历 思 ...

  9. js求两圆交点_详解js实现线段交点的三种算法

    本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊 引用 已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交) ...

最新文章

  1. 【ES6】变量的解构赋值
  2. drupal 6.0 入门教程
  3. 【控制】贪心算法(GA,Greedy Algorithm)及 Matlab 实现
  4. ElementUI中对el-table的某一列的时间进行格式化
  5. boost::statechart::in_state_reaction相关的测试程序
  6. python 装饰器有哪些_Python装饰器有哪些常见用途?
  7. PHP 社区拒绝在俄乌冲突中“站队”
  8. 取代 JavaScript!Python 成 Stack Overflow 最受质疑编程语言
  9. 网页制作,改变你的思维方式
  10. eclipse安装包下载
  11. 思科交换机的配置模式基本配置命令
  12. Flash builder 4.6下载以及安装
  13. 3、搭建rtmp视频推流服务器
  14. 用acdess制作html文件,使用ACDSee制作图片注释
  15. rls自适应滤波器matlab实现,rls算法的自适应滤波器matlab仿真作业.doc
  16. 【XJOI】燃烧的远征
  17. 解析|自动驾驶的核心技术是什么?
  18. 【小白福利—初级DBA入门必看】MySQL常用工具介绍(八)——客户端工具MySQL_import
  19. 吴恩达深度学习课程笔记(二):改善深层神经网络
  20. 莫明其妙的死机现象,莫明其妙的重启

热门文章

  1. 【English学习】10句电话英语礼貌结束通话
  2. mach3软件常见问题和解决方案
  3. CVPR论文复现争议后续:华人一作苦战两月给出有态度的分析结果
  4. 阿里云建站,重启阿里云服务器后网站打不开,该怎么办???如何检查TCP 80端口是否正常工作???
  5. 郑清 - 日常作息表(2020-03)
  6. 计算机没有快速启动,电脑Win10电源管理中没有快速启动选项的解决方法
  7. apt-get install r-base出现有几个软件包无法下载
  8. 工作中遇到的线上bug
  9. 企业线上培训平台哪个比较好
  10. springcloud整合nacos,遇见一个萝卜一个坑,不小心蹲了一会儿