题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
先来复习一下位操作的相关知识。http://blog.sina.com.cn/s/blog_618199e60100ka5b.html
class Solution { public: int NumberOf1(int n) { int c=0; for(c;n;c++) { n&=(n-1);//清除最低位的1,清除几次,就说明有几个1 } return c; } };
思路二: 但是超时。
class Solution { public: int NumberOf1(int n) { unsigned int c=0; for(c;n;n>>1) { c+=n&1; } return c; } };
思路三:
class Solution { public: int NumberOf1(int n) { std::bitset<32> s(n); return s.count(); } };