zoukankan      html  css  js  c++  java
  • 《剑指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的个数

    技进乎艺,艺进乎道
  • 相关阅读:
    Ubuntu下RabbitMq 安装与运行
    web_api所需包
    Ubuntu16.04下安装python3.6.4详细步骤
    JavaScript
    css
    html
    MySQL
    day4 函数
    day3 字典,集合,文件
    day2
  • 原文地址:https://www.cnblogs.com/weekend/p/6942062.html
Copyright © 2011-2022 走看看