剑指Offer算法实现之十:二进制中1的个数
来源:互联网 发布:邀请好友进群js编码 编辑:程序博客网 时间:2024/05/27 21:12
题目:请实现一个函数,输入一个整数,输出该数二进制表示法中1的个数。例如把9表示成二进制1001,有2位是1。因此如果输入9,该函数输出2.
思路:
① 是否处理负数?是。若是负数,符号位算计数吗?计数
② 最小负数与最大整数不对称性。若输入是INT_MIN,如何解决?绝大多数计算机均使用二进制补码表示负数
③ 在C/C++中,有符号数的有移位结果是未定义的。可能是算数右移、也可能是逻辑右移。尽管绝大部分编译器均使用算数右移
编译环境:ArchLinux+Clang,C++11
实现一:减1按位与法
#include <iostream>#include <stdexcept>#include <cassert>#include <limits>using namespace std;int cnt_bit1(int n){ if (n == numeric_limits<int>::min()) { return 1; // 最小负整数,直接返回符号位的1 } int cnt = 0; while (n) { ++cnt; n = (n-1) & n; } return cnt;}int main(){ assert(cnt_bit1(0) == 0); assert(cnt_bit1(1) == 1); assert(cnt_bit1(254) == 7); assert(cnt_bit1(-2) == 31); assert(cnt_bit1(numeric_limits<int>::min()) == 1); cout << "OK!" << endl;}
- 剑指Offer算法实现之十:二进制中1的个数
- 剑指offer系列之十:二进制中1的个数
- 剑指offer之十---二进制中1的个数
- 二进制中1的个数[剑指offer]之python实现
- 《剑指Offer》面试题十之计算二进制数中 1 的个数
- 剑指offer----二进制中1的个数----java实现
- 剑指Offer之二进制中1的个数
- 剑指Offer之 - 二进制中1的个数
- 【剑指offer】之二进制中1的个数
- 剑指offer系列之9:二进制中1的个数
- 剑指offer(七)之二进制中1的个数
- 剑指offer之二进制中1的个数
- 【剑指offer之二进制中1的个数】
- 剑指offer 之 二进制中1的个数
- 剑指offer之二进制中1的个数
- 剑指offer之二进制中1的个数
- [转]二进制中1的个数[剑指offer]之python实现
- 剑指offer:二进制中1的个数
- udhcp源码详解(六)--script
- cygwin编译protobuf-2.4.1
- 杭电4557-非诚勿扰
- 欧拉回路的总结
- Algorithm Gossip: 約瑟夫問題(Josephus Problem)
- 剑指Offer算法实现之十:二进制中1的个数
- OTSU算法对图像二值化
- 智能车PCB心得
- NY--108 -- 士兵杀敌(一)
- Hibernate总结
- linux下有用的清理系统命令
- UVA 10047 The Monocycle (状态记录广搜)
- 第五章变量的更多内容
- BFS+状态压缩 hdu-1885-Key Task