剑指Offer第11题:二进制中1的个数 发表于 2020-01-04 更新于 2024-11-09 分类于 剑指Offer 题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路:对于一个二进制数减1,该数最右边的1变为0,最右边的1的右边若存在0,则变为1,例如:1110111000 - 1 = 1110110111。因此,一个数n与n-1做按位与运算,就能消去一个二进制1,循环直至n==0,即可得出n的二进制中1的个数。 代码: 12345678int NumberOf1(int n) { int count = 0; while (n != 0) { n &= (n-1); count += 1; } return count;}