位运算之二进制中1的个数
二进制中1的个数
https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&&tqId=11164&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
题解:
这是位运算的一个的应用,利用位运算中的与运算 + 左移运算
知识点补充:
C++ 提供了按位与(&)、按位或(| )、按位异或(^)、取反(~)、左移(<<)、右移(>>)这 6 种位运算符。 这些运算符只能用于整型操作数,即只能用于带符号或无符号的 char、short、int 与 long 类型。
其中的按位与的
1 & 1 = 1;
class Solution { public: int NumberOf1(int n) { int count = 0; while(n) { if(n&1) //与1相与,等于1表示当前位上的数字为1 count ++ ; n = n >> 1; //再将n右移一位,将之前判断的1右移掉,对剩下的进行判断 } return count; } };