C# 二进制-删除数字中的右侧零

C# 二进制-删除数字中的右侧零,c#,binary,bit-shift,C#,Binary,Bit Shift,我不知道如何删除给定二进制数中的右零,如下所示: 00110000 -> 11 1000 -> 1 根据我的示例,我知道我可以执行4和3的右移以删除不需要的零,但我不知道如何计算右移所需的位数。这应该可以: if (x != 0) { while (x % 2 == 0) x = x >> 1; } 它基本上说,当数字为偶数时,保持位向右移动(最右边的位不是1) 正如@Streamline在评论中所提到的,循环本身不能用于0的值,因此您必须首先

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

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的值,可以将其指定给临时变量,并使用该变量。

数字存储的数据类型/格式是什么?整数、字符串或其他?@RossGurbutt无符号整数您可能想添加一个
x!=0
切换到循环条件。否则这将以一个无休止的循环结束。谢谢@RossGurbutt和Streamline,问题解决了!:)