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/

10-11 17:55