题目概述
实现一个函数,要求输入一个整数,输出该数对应的二进制数中1的个数。例如9表示成二进制是1001,那么输入9的话,屏幕上打印2
求解方法1
size_t numberOf1(int value)
{
int count = 0;
while(value){
if(value & 0x01){
++count;
}
value = value >> 1;
}
return count;
}
分析:
这种方法遇到的一个问题就是负数,如果传入一个-1,那会怎样?
对,无限循环,我们需要改进。
求解方法2
//防止出现负数导致无线循环
size_t numberOf1(int value)
{
int count = 0;
for(size_t i = 0; i < 32; ++i){
if(value % 1){
++count;
}
value = value >> 1;
}
return count;
}
分析:
负数也可以进行计算,但每次都要循环32次,能不能优化一下呢?
求解方法3
//当一个数与上比自己小1的数,那么该数最后一个1会被置为0
size_t numberOf1(int value)
{
int count = 0;
while(value){
++count;
value = (value - 1) & value;
}
return count;
}
————————————————————————————————————————
版权声明:本文为CSDN博主「皓皓松」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_31828515/article/details/62041384
————————————————————————————————————————