0

我是这样做的:你如何在 C 中设置、清除和切换单个位?.

清除一点

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

数字 &= ~(1 << x);

那将清除位x。您必须使用按位非运算符 ( ) 反转位字符串~,然后将其与。

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

4

3 回答 3

2

It doesn't actually say that. It says "Cannot implicitly convert type 'int' to 'uint'. An explicit conversion exists (are you missing a cast?)"

That's because 1 << x will be of type int.

Try 1u << x.

于 2013-07-14T09:48:41.940 回答
1
UInt32 number = 40;
Int32 x = 5;
number &= ~((UInt32)1 << x);
于 2013-07-14T09:47:20.013 回答
0

如果将复合运算符替换为正常的 ,则可以将结果(即 a long)转换回a :uint&=&

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

另一种方法是使用unchecked块:

uint number = /*...*/;
unchecked
{
    number &= (uint)~(1 << x);
}
于 2013-07-14T09:40:56.970 回答