0

次のループを作成しようとしています:

int temp=0x07;

if(left sensor detects){
byteTx((temp)^(1<<0)); //(toggle bit 0)
}

if(right sensor detects){
byteTx((temp)^(1<<2)); //(toggle bit 2)
}

if(front sensor left || front sensor right detects){
byteTx((temp)^(1<<1)); //(toggle bit 1)
}

ただし、他のすべての if ステートメントは正しい値を切り替えますが、他のステートメントはリセットします (temp が 0x07 であるため)。

質問 : 必要なビットのみをトグルし、他の if ステートメントによってトグルされた場合でも他のビットを変更しないようにするにはどうすればよいですか。基本的に、出力を保存し、temp の代わりにそれを使用したいと考えています。

助けてくれてありがとう。さらに情報が必要な場合はお知らせください。

編集

回答ありがとうございますが、トグルの方法を尋ねているのではなく、トグルされた値が IF ステートメント間で一貫していることを確認する方法を尋ねています。

0x07 は、他の IF ステートメントでトグルされる他のビットをリセットし続けます。IF ステートメントが他のビットをリセットしないようにしたいと思います。

0000 0111 ^(1<<0) は、出力が 0000 0110 であることを意味します

しかし、他の IF ステートメントの場合:

0000 0111 ^(1<<2) は、出力が 0000 0011 であることを意味します

ご覧のとおり、結果は 0011 で、最初のステートメントの 0 ビットが 1 に戻ります。

どうすればそれを防ぐことができますか?

4

4 に答える 4

1

トグル後にトグルされたビットを一時的に保持したい場合は、新しい状態を書き戻すことによって、それを変更する必要があります。みたいな

if(left sensor detects){
   temp=(temp)^(1<<0); //(toggle bit 0)
   byteTx(temp);
}

ループの最後にtemp、トグルされたすべてのビットが含まれます。

于 2012-04-26T14:48:31.503 に答える
0

これを試して:

int temp=0x07;

if(left sensor detects){
    temp ^= 1<<0;
    byteTx(temp); //(toggle bit 0)
}

if(right sensor detects){
    temp ^= 1<<2;
    byteTx(temp); //(toggle bit 2)
}

if(front sensor left || front sensor right detects){
    temp ^= 1<<1;
    byteTx(temp); //(toggle bit 1)
}
于 2012-04-26T14:40:28.393 に答える
0

XOR(^)を使用します。

古い値を保持するための0のビット
単位XOR古い値を切り替えるための1のビット単位XOR

oldvalue ^ 0x01 /* toggle bit 0 */
oldvalue ^ 0x02 /* toggle bit 1 */
...
于 2012-04-26T14:41:05.947 に答える
0

XOR演算子«^»を使用できます。

于 2012-04-26T14:44:26.800 に答える