1

正直に言うと、これは宿題で、どうしてもやり遂げることができません。タスクは、1 バイトを使用して 8 つの異なるチェックボックスを処理することです。チェックボックスを含むフォームのコンストラクターは、入力としてバイトを受け取り、入力に基づいてチェックボックスを「チェック済み」に設定します。フラグバイトはどこかに保存され、その後、1 つのチェックボックスのステータスが変更されるたびに (チェックされたものからチェックされていないものに、チェックされていないものからチェックされたものに)、それに応じてフラグバイトを変更する必要があります。これまでのところ、最初の部分しかできませんでした:

public Form1(byte flags)
{
    InitializeComponent();
    flags2 = flags;
    if ((flags & 0x01) >> 0 != 0) checkBox1.Checked = true; 
    if ((flags & 0x02) >> 1 != 0) checkBox2.Checked = true; 
    if ((flags & 0x04) >> 2 != 0) checkBox3.Checked = true; 
    if ((flags & 0x08) >> 3 != 0) checkBox4.Checked = true; 
    if ((flags & 0x10) >> 4 != 0) checkBox4.Checked = true;
    if ((flags & 0x20) >> 5 != 0) checkBox6.Checked = true; 
    if ((flags & 0x40) >> 6 != 0) checkBox7.Checked = true;
    if ((flags & 0x80) >> 7 != 0) checkBox8.Checked = true; 
}    

しかし、1ビットだけではない方法を本当に知りません。加算を使用することを考えましたが、残りはビットを左に変更します。このトリックは、休符が影響を与えない最も重要なビットでのみ使用できます。

private void checkBox8_CheckedChanged(object sender, EventArgs e)
{
    flags2 += 0x80;
}       

他のビットについては、本当に助けが必要です。

4

4 に答える 4

2

ビットを切り替えるには、XOR 演算子 ( ^)を使用します。

flags ^= <bits>;   -or-  flags2 = flags ^ <bits>;   -e.g.-  flags ^= 0x04;

ビットを設定するには、OR 演算子 ( |)を使用します。

flags |= <bits>;   -or-  flags2 = flags | <bits>;   -e.g.-  flags |= 0x08;

ビットをクリアするには、AND 演算子 ( &) と NOT 演算子 ( ~)を使用します。

flags &= ~<bits>;  -or-  flags2 = flags & ~<bits>;  -e.g.-  flags &= ~0x08;
于 2013-05-10T20:53:33.733 に答える
1

ビットマスクを反転する必要があります:

flags &= ~0x10

ビット 4 (0x10) を 0 に設定します
~演算子はすべてのビットを反転します (8 ビットの例):

 0x10 (0001000)
~0x10 (1110111)

ビットを切り替えるには、これを使用します (xor):

flags ^= 0x10

ビットを操作したい場合、加算を使用してもうまくいきません。
練習のために、すべての数値をビット マスクとして書き留めることをお勧めします: 0x10 = 0001000(基数 2)

于 2013-05-10T20:50:52.273 に答える