求一个数的二进制中有多少了 1 的三种算法 ——Java篇
求一个数的二进制中有多少了 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.三种以上算法解决两个正整数最大公约 ...
- 通过C语言“求俩个数的二进制不同位的个数”
Hellow,我是jack,今天给大家分享的是C语言实现求俩个数的二进制不同位的个数.话不多说,让我们直接进入正题. 首先,我们应该想到要求俩个不同数的二进制位的不同个数,我们就需要通过或运算符进行实 ...
- C++返回一个数的二进制最右边的一位的实现算法(附完整源码)
C++返回一个数的二进制最右边的一位的实现算法 C++返回一个数的二进制最右边的一位的实现算法完整源码(定义,实现,main函数测试) C++返回一个数的二进制最右边的一位的实现算法完整源码(定义,实 ...
- 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数
第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...
- c语言求最小公倍数和最大公约数三种算法
C语言求最小公倍数和最大公约数三种算法(经典) 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b ...
- C语言求最小公倍数和最大公约数三种算法(经典)
C语言求最小公倍数和最大公约数三种算法(经典) 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为 ...
- 求最大公因数的三种算法及简要说明
求最大公因数的三种算法及简要说明 1.连续整数法 从给定的最小的数开始按1递减,直至找到一个能被两者都整除的数. public static int gcd1(int x, int y){int mi ...
- 求素数的三大算法 —— Java 篇
求素数的三大算法 -- Java 篇 文章目录 求素数的三大算法 -- Java 篇 算法一 :暴力遍历 思路: 代码: 结果: 算法二:折半范围遍历 思路: 代码: 结果: 算法三:根号范围遍历 思 ...
- js求两圆交点_详解js实现线段交点的三种算法
本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊 引用 已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交) ...
最新文章
- 【ES6】变量的解构赋值
- drupal 6.0 入门教程
- 【控制】贪心算法(GA,Greedy Algorithm)及 Matlab 实现
- ElementUI中对el-table的某一列的时间进行格式化
- boost::statechart::in_state_reaction相关的测试程序
- python 装饰器有哪些_Python装饰器有哪些常见用途?
- PHP 社区拒绝在俄乌冲突中“站队”
- 取代 JavaScript!Python 成 Stack Overflow 最受质疑编程语言
- 网页制作,改变你的思维方式
- eclipse安装包下载
- 思科交换机的配置模式基本配置命令
- Flash builder 4.6下载以及安装
- 3、搭建rtmp视频推流服务器
- 用acdess制作html文件,使用ACDSee制作图片注释
- rls自适应滤波器matlab实现,rls算法的自适应滤波器matlab仿真作业.doc
- 【XJOI】燃烧的远征
- 解析|自动驾驶的核心技术是什么?
- 【小白福利—初级DBA入门必看】MySQL常用工具介绍(八)——客户端工具MySQL_import
- 吴恩达深度学习课程笔记(二):改善深层神经网络
- 莫明其妙的死机现象,莫明其妙的重启