博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指Offer》题目——位运算
阅读量:7197 次
发布时间:2019-06-29

本文共 871 字,大约阅读时间需要 2 分钟。

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

 

转载于:https://www.cnblogs.com/weekend/p/6942062.html

你可能感兴趣的文章
JS学习随记_day04
查看>>
hive集成sentry的sql使用语法
查看>>
java基础-继承
查看>>
树莓派无显示器上手步骤
查看>>
菜鸟学习Hibernate——简单的增、删、改、查操作
查看>>
变态工作之修改hibernate让其支持null主键
查看>>
搜索引擎的分片(shard)和副本(replica)机制
查看>>
pcb中的电子学基础
查看>>
笔记本wifi灯不亮了怎么办?
查看>>
06、开源游戏-“胡子”开始界面设计-代码
查看>>
使用IntelliJ IDEA开发SpringMVC网站(二)框架配置
查看>>
mysql主从搭建笔记
查看>>
JFinal 配置html伪静态?
查看>>
ASCII码表
查看>>
Java容器源码分析-HashMap vs TreeMap vs LinkedHashMap
查看>>
谈高考真题的使用(数学)
查看>>
RecyclerView列表调用addItemDecoration实现添加自定义分割线
查看>>
一个简单的操作提示
查看>>
Node.js菜鸟入门HelloWorld。
查看>>
最近读的几本书
查看>>