二进制中1的个数

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

解析:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。这个时候如果我们再把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。如1100&1011=1000.也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。

public int searchNumberOne(int n){
    int count = 0;
    while(n!=0){
        count++;
        n = n & (n -1);
    }
       return count;
    }
}

这么变态。。。这都能想到。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nummy

Python 弱引用的使用

和许多其它的高级语言一样,Python使用了垃圾回收器来自动销毁那些不再使用的对象。每个对象都有一个引用计数,当这个引用计数为0时Python能够安全地销毁这个...

20420
来自专栏醒者呆

正则表达式——Java程序员懂你

正则表达式 关键字:正则表达式,Pattern,Matcher,字符串方法,split,replace 前文书立下了一个flag,这里要把它完成,就是正则...

38350
来自专栏编程坑太多

javascript各进制前缀 及 转换

18640
来自专栏彭湖湾的编程世界

【算法】实现栈和队列

栈(stack) 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除 ? 可以将其类比于下面文件的取放操作:新到的文件会被先取走...

35060
来自专栏Python小屋

Python版基于递归的冒泡排序算法

应读者要求,写个基于递归的冒泡排序算法代码,之前发过的排序算法代码请参考:Python版快速排序算法,Python版选择排序算法,Python版冒泡法排序算法。...

31630
来自专栏aCloudDeveloper

LeetCode:4_Median of Two Sorted Arrays | 求两个排序数组的中位数 | Hard

题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. F...

18460
来自专栏Golang语言社区

Go语言中的Array、Slice、Map和Set使用详解

Array(数组) 内部机制 在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型,元...

33880
来自专栏Golang语言社区

Go语言中的Array、Slice、Map和Set使用详解

Array(数组) 内部机制 在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型,元...

35790
来自专栏desperate633

LintCode 跳跃游戏题目分析代码

10930
来自专栏小樱的经验随笔

python学习笔记之运算符

目录 前言 软件环境 身份运算符 算术运算符 比较运算符 位移运算符 自变运算符 位运算符 逻辑运算符 成员关系运算符 Python真值表 最后 前言 在前面的...

34230

扫码关注云+社区

领取腾讯云代金券