算法--微软面试:整数的二进制表示中1的个数(Java实现)
Q题目
整数的二进制表示中1的个数
输入一个整数,求该整数的二进制表达中有多少个1。
例如,输入10,由于其二进制表示为1010,有两个1,因此输出2。
这是一道很基本的考查位运算的面试题。
Answer解法
两种方式:
1.先将整数num转换为二进制后,在遍历
2.直接使用位运算
这道题的目的本就是考察位运算,所以建议采用第二种解法。
第二种算法中注意点:区别 右移>>和 无符号右移>>>
就该题本身而言,没有什么难度,这次就不做逻辑分析了。
代码如下
public class Test {public static void main(String[] args) {//测试System.out.println("方法一:"+getCountOne(1801));System.out.println("方法一:"+getCountOne(-1801));System.out.println("******************************");System.out.println("方法二:"+getCountOne2(1801));System.out.println("方法二:"+getCountOne2(-1801));}//方法一:进制转换后,for循环public static int getCountOne(int num){//1.转换为二进制String binary=Integer.toBinaryString(num);System.out.println(num+" 转化为二进制:"+binary);int count=0;//计数器for(int i=0;i<binary.length();i++){char x=binary.charAt(i);if(x=='1'){count++;}}return count;}//方法二:位运算public static int getCountOne2(int num){int count=0;while(num!=0) {if((num&1)==1) {count++;}//注意:必须使用无符号位右移(>>>)--区别于:右移(>>),采用右移时,负数会陷入死循环(-1>>-1,结果为-1)num = num>>>1;}return count;}}
运算结果
1801 转化为二进制:11100001001
方法一:5
-1801 转化为二进制:11111111111111111111100011110111
方法一:28
******************************
方法二:5
方法二:28
算法--微软面试:整数的二进制表示中1的个数(Java实现)相关推荐
- 整数的二进制表示中 1 的个数
2019独角兽企业重金招聘Python工程师标准>>> 题目:整数的二进制表示中 1 的个数 要求: 输入一个整数,求该整数的二进制表达中有多少个 1. 例如输入 10,由于其二进制 ...
- 输出一个整数的二进制表示中1的个数
引言 在一个非零整数的二进制表示中,至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,若这个1的后面还有数字0,则这些数字0都会变成1,其余所有位不变. 举例如下:二进制数 ...
- 100题_22 整数的二进制表示中1的个数
输入一个整数,求该整数的二进制表达中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 这个题非常简单,考的是位运算,我们每次向左移1位,判断最后一位是不是1就可以了.不多说 ...
- 算法 - 求一个正整数的二进制表示中1的个数(C++)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! #inc ...
- 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
转自http://my.oschina.net/ithaibo/blog/142655 题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目引自http://ac.jobdu ...
- JAVA实现输入一个整数,输出该数二进制表示中1的个数(《剑指offer》)
题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 这个题目有个比较有意思并且被公认的解法,我就先贴答案吧: public class Solution {public int ...
- 《剑指offer》-统计整数二进制表示中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 直观思路就是把二进制表示从右往左统计1的个数.直接想到移位操作来迭代处理.坑点在于负数的移位操作会填充1.有人贴出了逻辑移位 ...
- 计算数值二进制表达式中1的个数
--------------------------------------------- -- 时间:2019-03-21 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163 ...
- 二进制表示中 1 的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 需要注意的是: 右移运算符是将一个二进制数按指定移动的位数向右移动. 移动过程中,正数最高位补0,负数最高位补1,无符号数最 ...
最新文章
- 【硬核技能】舒工自创bind绑定数据方法,类似angular和vue绑定数据原理
- STM32系统滴答定时器(systick)应用
- Django路由介绍
- php stock 资料地址
- eclipse failed to load the jni jvm.dll
- QT的QMessageAuthenticationCode类的使用
- 基于matlab 读取文件夹 保存文件夹
- Qt5.2 for Android 配置及部署到手机运行
- CodeForces - 1058A. In Search of an Easy Problem
- EF 实现自定义数据库字符串
- kali linux conky配置文件,7个美丽的Conky配置为您的Linux桌面 | MOS86
- P1307 [NOIP2011 普及组] 数字反转(python3实现)
- 技术栈是什么_我从找不到实习到拿大厂offer经历了什么?
- C#中完美克隆引用类型的对象
- Java反射初探 ——“当类也学会照镜子”
- 微信小程序登录注册界面
- 看某帖有感(敬告我,以及我亲爱的朋友们)
- AWS韩小勇为创业者详细解读云服务商如何为他们提供服务
- eve单机版mysql_eve单机版中文下载_eve单机版下载-游迅网
- 如何把一个长链接缩短成一个短链接?
热门文章
- Day02-深度学习原理与使用方法
- cass软件yy命令_WIN10系统中的CASS字体问题
- 操作系统实验——简易FAT16文件系统的实现
- [Windows子系统] Ubuntu18.04安装及换源
- 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)
- [TT]-Trustonic acronyms
- ATF RT-SVC的介绍
- const * 和 * const 的区别
- 【安全漏洞】黑客利用IE 0 day漏洞部署VBA恶意软件
- error RC2108: expected numerical dialog constant