二进制 - 删除数字中右边的零

Binary - Remove right-hand zeroes in a number

我不知道如何删除给定二进制数中右侧的零,如下所示:

00110000 -> 11
1000 -> 1

根据我的示例,我知道我可以执行 4 和 3 的右移以删除不需要的零,但我不知道如何计算右移所需的位数。

这应该有效:

if (x != 0)
{
    while (x % 2 == 0)
        x = x >> 1;
}

它基本上是说在数字为偶数时保持右移(最右边的位不是 1)。

正如@Streamline 在评论中提到的,循环本身对值 0 不起作用,因此您必须首先检查它不是 0。
不需要每次循环都检查这个,因为如果 x != 0 那么 x >> n 永远不会是 0 给定我们在 x % 2 != 0

时停止的其他循环条件

如果您需要知道移位的次数,可以在循环中添加一个计数器。
如果你不想改变 x 的值,你可以将它赋值给一个临时变量并使用它。