二进制 - 删除数字中右边的零
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 的值,你可以将它赋值给一个临时变量并使用它。
我不知道如何删除给定二进制数中右侧的零,如下所示:
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 的值,你可以将它赋值给一个临时变量并使用它。