如果我在Java中有一个整数,我如何计算除了前导零之外有多少位是零?
我们知道Java中的整数有32位,但是计算数字中设置位的数量,然后从32位中减去并不能得到我想要的结果,因为这也将包括前导零。
例如,数字5有一个零位,因为在二进制中它是101。
发布于 2010-06-20 23:37:10
要计算Java中的非前导零,可以使用以下算法:
public static int countNonleadingZeroBits(int i)
{
int result = 0;
while (i != 0)
{
if (i & 1 == 0)
{
result += 1;
}
i >>>= 1;
}
return result;
}如果您的输入通常很小,此算法将相当快,但如果您的输入通常是较大的数字,则在this page上使用其中一个位黑客算法的变体可能会更快。
发布于 2010-06-21 02:11:23
看一下Integer的API文档。
32 - Integer.numberOfLeadingZeros(n) - Integer.bitCount(n)发布于 2010-06-20 23:39:41
计算数字中“位”的总数,然后从总位数中减去1的个数。
https://stackoverflow.com/questions/3079788
复制相似问题