博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 191. Number of 1 Bits Question
阅读量:6757 次
发布时间:2019-06-26

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

题意:给你一个整数,计算该整数的二进制形式里有多少个“1”。比如6(110),就有2个“1”。

 

一开始我就把数字n不断右移,然后判定最右位是否为1,是就cnt++,否则就继续右移直到n为0。

可是题目说了是无符号整数,所以给了2147483648,就WA了。

因为java里的int默认当做有符号数来操作,而2147483648超过int的最大整数,所以在int里面其实是当做-1来计算的。

那么,不能在while里面判断n是否大于0,和使用位操作符>>。应该使用位操作符>>>,这个操作符是对无符号数进行右移的。

 

public class Solution {    // you need to treat n as an unsigned value    public int hammingWeight(int n) {        int cnt = 0;        for(int i = 0; i < 32; i++) {            if( ((n>>>i)&1) == 1 ) cnt++;        }        return cnt;    }}

 

转载于:https://www.cnblogs.com/sevenun/p/5902477.html

你可能感兴趣的文章
Management Console 工具管理类软件通用开发框架(开放源码)
查看>>
Gnome 3.2 发布计划及新功能
查看>>
已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性...
查看>>
利用bobo-browse 实现lucene的分组统计功能
查看>>
/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
查看>>
基于SGIP协议编写短信网关接口
查看>>
NSCharacterSet 去除NSString中的空格
查看>>
ubuntu server 使用parted分区
查看>>
自定义网页日历
查看>>
solr实现满足指定距离范围条件的搜索
查看>>
ubuntu vsftp安装
查看>>
[转载]Web前端研发工程师编程能力飞升之路
查看>>
Redis
查看>>
XINS 3.0 正式版发布,远程 API 调用规范
查看>>
sqlserver 2005 64bit express
查看>>
(转)Oracle中For和while及一些应用
查看>>
动态链接导入库与静态链接库
查看>>
jQuery基础及选择器
查看>>
DragonFly BSD 3.2 发布
查看>>
软件开发中常见的十大系统瓶颈(转)
查看>>