java:懂二进制
来源:互联网 发布:ubuntu 查看内核版本 编辑:程序博客网 时间:2024/06/16 07:25
【题目描述】
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
【输入例子】:
1999 2299
【输出例子】:
7
思路:刚开始的时候,并没有读懂题意,再多读几遍,就是要求两个二进制有几位不同。
因为我们知道两位二进制数在某一位上有不同,那么他们异或的时候,那一位就会是1。所以如果能够知道他们想与的结果有几个1不就可以了吗。
所以我们又想到了一个求某个二进制中有几个1的办法,就是用到与运算。
int func(int num){ int temp=0; while(num!=0){ temp++; num=num&(num-1);}/*为什么while的条件是num不等于0,因为循环每次执行 num=num&(num-1),最终num会等于0的,num等于0,&运算就可以结束了。 【举个栗子】:假设x=9,即1001;那么x-1=8,1000。 1001 9 &1000 8 ——————— 1000 8 &0111 7 ——————— 0000 执行了两次后num为0,所以9的二进制中有2个1,其他的例子也是一个意思 */return temp;}
方法1:
//java/** * 获得两个整形二进制表达位数不同的数量 * * @param m 整数m * @param n 整数n * @return 整型 */public class solution(int m,int n){ int a=m^n;//异或 int count=0; //求a中1的数量 while(a>0){ count++: a=a&(a-1); } }
方法2:
思路:还是异或,然后把异或得到的结果,每位都和1相与。具体实现就是异或的结果每次和1相与后就右移1位
//javapublic class solution(int m,int n){ int a=m^n;//异或 int count=0; while(a!=0){ /* 如果某一位上&1等于1,那么证明某一位上就是1 */ if(a&1==1){ count++; a>>=1;//右移 } }}
方法3:
思路:将m和n逐位比较,若相等,count就+1;具体实现:先比较他两的最低位,然后右移,又继续比较他两的最低位,直到比完。如何取得最低位?和1相与。
最后一位和1相与,得到他本身
前面的和0相与,得到0
public class solution(int m,int n){ int len=32;//根据题意:两个int32整数m和n的二进制表达 int count=0; while(len){ int m_low=m&1;//取得m的最后一位 int n_low=n&1 if(m_low!=n_low){ count++; m>>=1; n>>=1; len--;//往右移,所以长度要-1;}}return count;}
0 0
- java:懂二进制
- 2016小米-懂二进制-Java
- java 二进制
- Java-二进制
- 懂二进制 小米2016年校招 Java实现
- 懂二进制
- 懂二进制
- 懂二进制
- 懂二进制
- 懂二进制
- 懂二进制
- Java二进制兼容性原理
- Java二进制兼容性原理
- 二进制转向十进制java
- java 二进制转换
- Java--二进制正负表示
- java 二进制十进制转换
- java二进制转换
- 宏汇编实现字母大小写的转换
- struts2_09_动态结果集
- java中常见的几种排序方式
- Fibonaccci数列
- 164. Maximum Gap
- java:懂二进制
- 进程和线程的区别
- 速度飞跃——关系型数据库到非关系型数据库
- [Java]java基本数据类型转换
- 2016 东莞信息特长生考试 1 子数整数
- react-native报错Could not get BatchedBridge, make sure your bundle is packaged correctly
- 开源项目导入eclipse的一般步骤
- 一篇文章搞懂人工智能、机器学习和深度学习之间的区别
- 思维 CodeForces