剑指OFFER-二进制中1的个数
2017-08-22 16:23
411 查看
题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题解
这是个位运算的题目。解法一:可以通过按位与操作,通过将每一位和1与操作来求出1的个数。
解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的时候,它的最后一位1会变为0,后边的所有0会变为1。比如10100,减一之后会变为10011,然后用原数字10100和10011进行与操作之后,会得到10000,也就是通过这个操作,可以将一个1变为0,所以一个二进制数字能进行多少次这样的操作,就有多少个1.
代码
//解法一 function NumberOf1($n) { $count = 0; $flag = 1; while ($flag != 0) { if (($n & $flag) != 0) { $count++; } $flag = $flag << 1; } return $count; } // 解法二 function NumberOf1($n) { $count = 0; if($n < 0){ // 处理负数 $n = $n&0x7FFFFFFF; ++$count; } while($n != 0){ $count++; $n = $n & ($n-1); } return $count; }
相关文章推荐
- 剑指offer: 二进制中1的个数
- 剑指offer--二进制中1的个数
- 剑指offer:二进制中1的个数(python)
- 剑指Offer 二进制中的1的个数
- 剑指offer 10- 二进制中1的个数
- 【剑指offer】二进制中1的个数
- 剑指offer: 二进制中1的个数(位运算)
- 【剑指offer】面试题10:二进制中1的个数
- 剑指 offer set 5 二进制中 1 的个数
- [剑指offer]面试题10:二进制中1的个数
- 剑指offer 二进制中1的个数
- 剑指offer(C++)——二进制中1的个数
- 剑指offer—二进制中1的个数
- [转]二进制中1的个数[剑指offer]之python实现
- 剑指offer面试题[10]-二进制中1的个数
- 剑指Offer学习总结-二进制中1的个数
- [牛客网,剑指offer,python] 二进制中1的个数
- 剑指offer 二进制中1的个数
- [剑指offer]二进制中1的个数
- 剑指offer--面试题10:二进制中1的个数--Java实现