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

使用异或 ( ^)。

按位异或与 0 保持旧值
按位异或与 1 切换旧值

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

您可以使用 XOR 运算符« ^ »。

于 2012-04-26T14:44:26.800 回答