int n;
for ( n = 0; i >0; n++)
{
i &= (i-1);
}
return n;
//也许它的功能是计算1的个数,我不知道这句话的意思
最佳答案
实际上,这是在计算i值中的一位数。但是,它仅对正值有效。 JRE提供的Integer.bitCount(i)可以做到这一点,并且可以在恒定时间内工作,也可以用于负值。
至于它是如何工作的,如果您不熟悉二进制算术,将很难理解。基本上发生的情况是,在每个循环中,最低有效位被抵消,并且当所有比特都被抵消后,循环停止。
由于循环条件选择不当,它不能在负值下正常工作。它应该是i!= 0而不是i> 0,然后它也可以使用负值。
关于java - Java中i&=(i-1)的含义是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38644840/