博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer子求一个整数二进制中1的个数
阅读量:3906 次
发布时间:2019-05-23

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

输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。

class Solution {
public int NumberOf1(int n) {
int count = 0; //比较巧妙的方法,统计出现一个整数二进制数值(计算机中数值都是以补码的形式存在的,正数的补码为本身,负数的补码 // 需要额外求出来,先求反码,然后再加一。反码是符号位不变,然后其余位取反) while(n!= 0){
count++; //让n和n-1做按位与操作,假如有一个数二进制为1100,现在要统计这个二进制数中出现的1的个数,那么它减一之后为1011,此时做&运算可以把它 //最右边出现的1开始后面的所有位置零,下一次循环就继续找到下一个最右边的值,如此往复,那么就可以一个统计出 //整形二进制中1出现的个数。 n = n & (n - 1); } return count; }}

这里在补充一点关于求一个整数的二进制的一些方法

public static int NumberOf1(int n) {
/* * 第一种方法,自己想的 * */ boolean flag = false; if (n < 0) {
n=-n; } int index; ArrayList arrayList = new ArrayList(); StringBuilder sb = new StringBuilder(); while (n / 2.0 != 0) {
index = n % 2; n = n / 2; arrayList.add(index); } System.out.println(arrayList); Collections.reverse(arrayList);//获得了二进制的表现初级形式. System.out.println(arrayList); int len = 32 - arrayList.size(); for (int i = 0, k = 0; i < 32; i++) {
//获得32位二进制表示的字符串 if (i < len) {
sb.append("0"); } else {
sb.append(arrayList.get(k)); k++; } } String str = sb.toString(); System.out.println(str); if(flag){
//如果该整数,就还有进行求反码,以及根据反码求补码 sb.setCharAt(0,'1'); for(int i=1;i<=31;i++){
//除了符号位取反 if(sb.charAt(i)=='0'){
sb.setCharAt(i,'1'); } else{
sb.setCharAt(i,'0'); } } //加一操作 if(sb.charAt(sb.length()-1)=='0'){
//如果最后一位为零,那么直接加一即可,这里是直接设置为1 sb.setCharAt(sb.length()-1,'1'); } else {
//如果最后一位不为0,那么就是1,加一之后,要让它变成零,进位 //找到倒数第一个为零的字符,然后让这个字符置为1,它后面的字符都为0 int zeroIndex = sb.lastIndexOf("0"); sb.setCharAt(zeroIndex,'1'); for(int ind=zeroIndex;ind
=0;j--){
if(((1<

问题虽然是暂时得到了解决关于本题,引发了我的新的疑问,就是如果说要统计0出现的次数应该怎么写?(不用系统函数的情况)欢迎广大网友给点建议?

转载地址:http://frlen.baihongyu.com/

你可能感兴趣的文章
ubuntu linux root password
查看>>
callback in js
查看>>
git
查看>>
upgrade node.js with n
查看>>
simulate POST request
查看>>
HTTP and REST
查看>>
curl test REST interface
查看>>
nodemon to monitor node.js
查看>>
Node.js and Express
查看>>
guide for node.js and express, jade, mongodb
查看>>
express install
查看>>
md format and how to edit
查看>>
mac os rar files
查看>>
short url design
查看>>
Js Event Loop
查看>>
git init --bare
查看>>
setting up a new remote git repository
查看>>
git remote
查看>>
NodeJs 安装静态的文件服务
查看>>
redis LRU strategy
查看>>