清除一点
使用按位 AND 运算符 (
&
) 清除位。数字 &= ~(1 << x);
那将清除位
x
。您必须使用按位非运算符 ( ) 反转位字符串~
,然后将其与。
它适用于有符号整数类型,但不适用于无符号整数(例如 UInt32)。编译器说不可能对无符号类型进行这种操作。那么如何处理无符号数来清除一位呢?
清除一点
使用按位 AND 运算符 (
&
) 清除位。数字 &= ~(1 << x);
那将清除位
x
。您必须使用按位非运算符 ( ) 反转位字符串~
,然后将其与。
它适用于有符号整数类型,但不适用于无符号整数(例如 UInt32)。编译器说不可能对无符号类型进行这种操作。那么如何处理无符号数来清除一位呢?
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
.
UInt32 number = 40;
Int32 x = 5;
number &= ~((UInt32)1 << x);
如果将复合运算符替换为正常的 ,则可以将结果(即 a long
)转换回a :uint
&=
&
uint number = /*...*/;
number = (uint)(number & ~(1 << x));
另一种方法是使用unchecked
块:
uint number = /*...*/;
unchecked
{
number &= (uint)~(1 << x);
}