以下是用于找到最右设置位的代码示例:
int rightmostSetBit(int n)
{
return log2(n & -n) + 1;
}
在这个例子中, n
是一个整数,我们想要找到最右的设置位(即,二进制表示中的最右边的一个 1
)。以下是函数的工作原理:
n & -n
是一个位操作,它可以仅保留 n
的最右边的设置位,其他位置均为 0。例如,如果 n
的二进制表示是 10101000
,则 n & -n
将值设为 00001000
。
log2
函数返回给定值的二进制对数。例如,log2(8)
返回 3
,因为 8
的二进制表示为 1000
;log2(16)
返回 4
,因为 16
的二进制表示为 10000
。
因为 n & -n
仅保留了 n
的最右边的设置位,我们将其结果加 1,以获取最右边的设置位在 n
中的位置。
因此,rightmostSetBit(n)
将返回 n
中最右边的设置位的位置。
上一篇:不理解一些读取文件的代码行