首页 > 代码库 > 《剑指Offer》题目——位运算
《剑指Offer》题目——位运算
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目分析:无论使用什么方式,最关键的就是要考虑负数的处理方式
public class NumberOfOne { //方法一: 最优解 public static int numberOfOnes(int n){ int count =0 ; while (n!=0){ n = n & (n-1); count++; } return count; } //方法二:考虑一下Java对应的数据类型的移位处理规则 public static int numberOfOnes1(int n){ int count = 0; int flag = 1; while (flag!=0 ){ if ((n & flag) !=0 ){ ++count; } flag = flag << 1; } return count; } public static void main(String[] args){ // System.out.println(numberOfOnes(-3)); System.out.println(numberOfOnes1(-2)); } }
扩展一下:
1. 用一条语句判断一个整数是不是2的整数次方
答:判断这个整数的二进制表示的1的个数是不是1个即可。
2. 输入两个整数m和n,计算需要改变m的二进制表示中多少位才能得到n。
答:分两步:1)求这两个数的异或,2)统计异或结果中1的个数
《剑指Offer》题目——位运算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。