簡體   English   中英

如何清除C#中的單個位?

[英]How to clear a single bit in C#?

我是這樣做的如何在C中設置,清除和切換單個位?

清除一點

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

數&=〜(1 << x);

這將清除位x 您必須使用按位NOT運算符( ~ )反轉位字符串,然后將其取反。

它與帶符號的整數類型一起正常工作,但不適用於無符號的整數(例如,UInt32)。 編譯器說不可能對無符號類型進行這種操作。 那么如何處理無符號數字清除一位呢?

它實際上並沒有那么說。 它說:“無法將類型'int'隱式轉換為'uint'。存在顯式轉換(您是否缺少類型轉換?)”

這是因為1 << x將是int類型。

嘗試1u << x

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

如果將復合運算符&=替換為常規& ,則可以將結果long轉換為uint

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

另一種方法是使用unchecked塊:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM