#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//NumberOf1计算参数n的二进制补码中有几个1
//int NumberOf1(int n)
//{
// //这个代码遇到负数是不行的
// int count = 0;
// while (n)
// {
// if (n % 2 == 1)
// {
// count++;
// }
// n /= 2;
// }
// return count;
//}
//int NumberOf1(unsigned int n)
//{
// int count = 0;//改为无符号整形后-1将会被理解为一个巨大的数字
// while (n)
// {
// if (n % 2 == 1)
// {
// count++;
// }
// n /= 2;
// }
// return count;
//}
//int NumberOf1(unsigned int n)
//{
// int count = 0;
// int i = 0;
// for(i = 0; i < 32; i++)
// {
// if (((n >> i) & 1) == 1)
// {
// count++;
// }
// }
// return count;
//}
int NumberOf1(unsigned int n)
{
//更优解,但是不太明白
int count = 0;
int i = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
int main()
{
int n = 10;
int ret = NumberOf1(n);
printf("%d", ret);
return 0;
}
//代码练习,判断一个数是不是2的n次方
//k&(k-1)== 0
2022/4/18算术转化作业讲解
最新推荐文章于 2024-10-04 23:00:36 发布