C# 代码段从C++到C的转换

C# 代码段从C++到C的转换,c#,c++,.net-micro-framework,C#,C++,.net Micro Framework,我试图把C++代码段转换成c:< /p> if (latch_state & 0x1) { MC->setPin(AIN2pin, HIGH); } else { MC->setPin(AIN2pin, LOW); } if (latch_state & 0x2) { MC->setPin(BIN1pin, HIGH); } else { MC->setPin(BIN1pin, LOW); }

我试图把C++代码段转换成c:< /p>
  if (latch_state & 0x1) {
    MC->setPin(AIN2pin, HIGH);
  } else {
    MC->setPin(AIN2pin, LOW);
  }

  if (latch_state & 0x2) {
    MC->setPin(BIN1pin, HIGH);
  } else {
    MC->setPin(BIN1pin, LOW);
  }

  if (latch_state & 0x4) {
    MC->setPin(AIN1pin, HIGH);
  } else {
    MC->setPin(AIN1pin, LOW);
  }

  if (latch_state & 0x8) {
    MC->setPin(BIN2pin, HIGH);
  } else {
    MC->setPin(BIN2pin, LOW);
  }
我知道如何将MC->setpinnum,state转换为MC.setpinnum,state,这样它们就不会出现问题,但我对if语句会变成什么感到困惑

闩锁状态的类型为uint8\u t,但它的处理方式似乎类似于我试图将其转换为的字节,0x1似乎也是字节

那么,在if语句中,二进制and运算将如何计算

对于转换,我应该怎么做

如果闩锁状态&0x1==0x0或如果闩锁状态&0x1!=0x0还是完全不同的东西

if ((latch_state & 0x1) != 0)

应该有用。通常情况下,不计算布尔值的C++条件是对0进行隐式比较,用“true”表示表达式不是0。< /P> < P>实际上,十六进制数0x8、0x4、0x2、0x1是二进制的1000, 0100、0010, 0001。在代码中使用的方式让我想起了掩码。它们唯一的用途是关闭原始字节的所有位,除了它们打开的那个位。例如:

如果“闩锁状态==0x1”,则只有第一个条件为真

在你提供的两个答案之间,我认为第二个答案是正确的。您需要得到的数字不为0。然而,if语句不是这样做的吗


我希望这有助于…:D

要直接转换而不重新排列if块,可以使用第二个选项:

if ((latch_state & 0x1) != 0x0)
如果设置了位,结果将为非零,其计算结果为逻辑真值。所以你要测试结果不是零。上述语句相当于C或C++中的此语句:

if (latch_state & 0x1)

顺便说一句,看看你说的其他事情,把任何8位无符号整数看作“字节”是很正常的。因此,不要担心可能发生的任何“转换”。同样的事情。

参见C++语句所做的,但是C不为这个添加这个隐式测试!哦,那我很抱歉。所以第二个答案是正确的,不是吗?是的,第二个是C++中可接受的,但是在C中,整个条件必须是布尔值。0x0是-这是可以接受的,尽管我认为您可以使用“0”而不是“0x0”。