7

重複の可能性:
Cで1つのビットをどのように設定、クリア、および切り替えますか?

私は次の決勝に向けて勉強しています。学習ガイドからいくつかの質問を確認したいと思います。

いくつかのコンテキスト:

  • このSet()関数は、1バイトのビットを1に設定します

  • このUnset()関数は、バイト内のビットを0に設定します

  • このFlip()関数は、ビットをそれとは逆に「反転」させます

それで、私たちのクラスの何人かの子供は、研究ガイドの質問に答えるために自分自身にそれを取りました、しかし私はすでにいくつかの誤りを見つけました、そしてこれらの答えは怪しいように聞こえます。これが彼の言ったことです:

セットにはどの操作を使用しますか?or演算子|

Unsetにはどの操作が使用されますか?Xor演算子^2回実行

フリップにはどの操作が使用されますか?Xor演算子^

これらは、上記で説明した関数に実装する正しいビット演算子ですか?

4

4 に答える 4

6

セット用途または

未設定の使用および

Flip は Xor を使用します

これはすでにここで回答されています: How do you set, clear, and toggle a single bit?

于 2012-08-09T13:35:37.143 に答える
2

あなたは最初のものに適していますが、そのビットで withUnset()を使用する必要があります&0

于 2012-08-09T13:35:46.707 に答える
0

数値 x の n 番目のビットについて...

int Set(x, n){
   return x | (1 << n);
}

int Unset(x, n){
   return (x ^ (1 << n)) ^ (1 << n);
}

int Flip(x, n){
   return x ^ (1 << n);
}
于 2012-08-09T13:49:44.707 に答える
0
    00000000 |
    00000001 =
--------------
    00000001   // Sets

    00000001 &
    00000000 =
--------------
    00000000   // Unsets

    00000001 ^
    00000001 =
--------------
    00000000   // Flips

バイト内bitで操作されるビットは次のとおりです。

x |= (1 << bit);    // Sets
x &= ~(1 << bit);   // Unsets   00000001 becomes 11111110.
x ^= (1 << bit);    // Flips
于 2012-08-09T13:42:43.050 に答える