如何在C#中清除一个位?

时间:2013-07-14 09:38:11

标签: c# bit-manipulation

我是这样做的:How do you set, clear and toggle a single bit in C?

  

清除一点

     

使用按位AND运算符(&)清除一点。

     

number&amp; =〜(1 <&lt; x);

     

这将清除位x。你必须用位反转位串   按位NOT运算符(~),然后是AND。

它适用于有符号整数类型,但不适用于无符号整数(例如UInt32)。编译器说,对无符号类型执行这种操作是不可能的。那么如何处理无符号数以清除一位呢?

3 个答案:

答案 0 :(得分:2)

实际上并没有这么说。它说“不能隐式地将类型'int'转换为'uint'。存在显式转换(你是否错过了演员?)”

这是因为1 << x的类型为int

尝试1u << x

答案 1 :(得分:1)

UInt32 number = 40;
Int32 x = 5;
number &= ~((UInt32)1 << x);

答案 2 :(得分:0)

如果将复合运算符long替换为普通uint,则可以将结果(&=)转换回&

uint number = /*...*/;
number = (uint)(number & ~(1 << x));

另一种方法是使用unchecked块:

uint number = /*...*/;
unchecked
{
    number &= (uint)~(1 << x);
}