二进制中1的个数
✨ 思路:要求的是一个整形的数,其二进制的位数中有几个1
✨二进制位就想到了按位操作符,和位移操作符都是对二进制位进行操作的
&1 可以检查最低位是0还是1 移位>>就可以控制最低位的位置,我们让最低位移动i位
//计算一个数的二进制位中 1的个数
int NumberOf1(int n) {
int ret = 0;
for (int i = 0; i < 32; i++)
{
if ((n >> i) & 1 == 1)
{
ret++;
}
}
return ret;
}
✨另外一个思路:n&(n-1) 这个思路才是应该学会的重点
✨写出来,有一个规律,那就是每一次 & 就会让你少一个0,为什么呢?🧑🎓十进制中 n和n-1差了一个 1,是不是从n开始,一直 n= n&(n-1) 每次得到的 n 就是消掉一次二进制 1 的数 下👎我把每一次n-1的的那个值和初始的n进行比较 是不是刚好就是 二进制位 都是差一个1,但是相差1的二进制位的位置是不同的,在十进制下 15和下面的数依次相差 1 2 4 8 有没有发现一个规律 🤔👉
刚好就是从低位往高位走,将15的每一位都给判断了一下✨✨
int NumberOf1(int n ) {
//记录二进制位1的个数
int count = 0;
while(n)
{
n=n&(n-1);
count++;
}
return count;
}
✨ 就到这里结束了,这个题目并不难,主要就是为了理解 n &(n-1)这个思想
继 续 努力