C 用于计算相似1';它在比特流中

C 用于计算相似1';它在比特流中,c,bit-manipulation,C,Bit Manipulation,我试图计算一个比特流的连续比特数,我有这个代码。我假设,这必须运行,直到数字变为0,然后计数应该返回值。但是为什么没有条件语句将数字等于零(否则我怀疑这可能是一个无限循环),这样执行就会跳出循环并在结束后返回计数值。请不要重复它,因为我只是一个孩子,没有足够的声誉来评论任何疑问 int count_consecutive_ones(int in) { int count = 0; while (in) { in = (in & (in &

我试图计算一个比特流的连续比特数,我有这个代码。我假设,这必须运行,直到数字变为0,然后计数应该返回值。但是为什么没有条件语句将数字等于零(否则我怀疑这可能是一个无限循环),这样执行就会跳出循环并在结束后返回计数值。请不要重复它,因为我只是一个孩子,没有足够的声誉来评论任何疑问

 int count_consecutive_ones(int in) {
     int count = 0;
     while (in)
     {
         in = (in & (in << 1));
         count++;
     }
     return count;
 }
int计数\u连续的\u计数(int-in){
整数计数=0;
当
{

in=(in&(in首先:代码不计算比特流中的连续比特数。比特流中的所有比特都是连续的。这就是它被称为比特流的方式。它计算比特流中的连续比特数。不,不是在比特流中,而是在整数中

让我解释一下:

while(in)
{
  …
}
…是一个while循环,只要其条件为true就可以运行。在C中很长一段时间都没有布尔类型。如果任何类型的表达式不是零的表示形式,则条件为false,否则为true。对于整数,这意味着0的值为false,其他值为true。您可以将其理解为

while( in != 0)
{
  …
}
…用
!=
表示不相等

在你的循环中…:

in = (in & (in << 1));

in=(in&(in&)这是无效的Java代码。@shmosel请不要介意标记。我在这里询问逻辑。这看起来像是C代码。事实上,你有一个条件
in=(in&)(在某些语言中,布尔和整数是可互换的,零等于false,非零等于true。
while(in)
意味着
中的
为真,或者
中的
不为0,或者直到
中的
等于0。@shmosel这很有帮助。我必须在while循环中放入一个条件语句。我尝试使用上面的代码,并进行了一些必要的改进,以便在Java中使用,效果很好。