码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指Offer》题目——位运算

时间:2017-06-04 22:45:57      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:number   最优   方法   个数   stat   处理   ++   运算   表示   

题目描述:输入一个整数,输出该数二进制表示中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》题目——位运算

标签:number   最优   方法   个数   stat   处理   ++   运算   表示   

原文地址:http://www.cnblogs.com/weekend/p/6942062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!