0

私はそれが好きでした:Cで1ビットをどのように設定、クリア、トグルしますか? .

少しクリア

ビットごとの AND 演算子 ( &) を使用して、ビットをクリアします。

数 &= ~(1 << x);

それはビットをクリアしますx。ビットごとの NOT 演算子 ( ) を使用してビット文字列を反転し、~AND する必要があります。

符号付き整数型では問題なく動作しますが、符号なし整数 (UInt32 など) では動作しません。コンパイラは、そのような操作を符号なしの型に対して行うことは不可能だと言っています。次に、符号なしの数値を処理して 1 ビットをクリアする方法は?

4

3 に答える 3

2

実際にはそうは言っていません。「タイプ 'int' を 'uint' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)」

これ1 << xは、タイプが になるためintです。

試してみてください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 に答える