C# 如何使用按位&;(和)?

C# 如何使用按位&;(和)?,c#,bitwise-operators,bitwise-and,C#,Bitwise Operators,Bitwise And,对于一个我正在编写的程序,连接到一个带有三个输出托盘(口袋)的扫描仪,我需要使用SDK。在调用SDK之后,我收到一个表示口袋状态的int。要确定此“口袋”状态,文档中包含以下内容 获取输出口袋的状态。要确定口袋是满的还是空的,请使用按位AND(&)运算符检查返回值。有效值为: Csd.POCKET.P1_空口袋1为空 Csd.POCKET.P2_空口袋2为空 Csd.POCKET.P1_满口袋1已满 Csd.POCKET.P2_满口袋2已满 Csd.POCKET.P3_空口袋3是空的 Csd.

对于一个我正在编写的程序,连接到一个带有三个输出托盘(口袋)的扫描仪,我需要使用SDK。在调用SDK之后,我收到一个表示口袋状态的int。要确定此“口袋”状态,文档中包含以下内容

获取输出口袋的状态。要确定口袋是满的还是空的,请使用按位AND(&)运算符检查返回值。有效值为:

  • Csd.POCKET.P1_空口袋1为空
  • Csd.POCKET.P2_空口袋2为空
  • Csd.POCKET.P1_满口袋1已满
  • Csd.POCKET.P2_满口袋2已满
  • Csd.POCKET.P3_空口袋3是空的
  • Csd.POCKET.P3_满口袋3已满
我从来没有使用过位运算符,所以我完全不知所措。 上述“Pocket”结构的值如下所示:

public struct POCKET
{
  public const int P1_EMPTY = 1;
  public const int P1_FULL = 16;
  public const int P2_EMPTY = 2;
  public const int P2_FULL = 32;
  public const int P3_EMPTY = 4;
  public const int P3_FULL = 64;
}
我读过关于位运算符的书,我知道它们是做什么的,但在这个特定的情况下,我无法实现它


提前感谢大家。

测试位标志的典型模式是

// Entire key match  
if (returned_value & value_to_test == value_to_test) {
  ...
}

// Partial key match  
if (returned_value & value_to_test != 0) {
  ...
}
例如,如果要测试口袋#3是否已满:

if (returned_value & POCKET.P3_FULL == POCKET.P3_FULL) {
  ...
}
您可以通过
|
组合标志,并测试此类组合标志的部分匹配:

const int ALL_ARE_FULL = POCKET.P1_FULL | POCKET.P2_FULL | POCKET.P3_FULL;

...

// Test if any part of the flag is match (i.e. any pocket - at least one - is full)
// Please, notice != 0 comparison
if (returned_value & ALL_ARE_FULL != 0) {
   ...
}

// Compare with this: all three pockets are full
if (returned_value & ALL_ARE_FULL == ALL_ARE_FULL) {
   ...
}

看看这个例子,例如,
if(returned_value&POCKET.P2_FULL==POCKET.P2_FULL){…}
检查POCKET 2是否已满,也可能值得一提的是,您缺少8的枚举值。@DavidG,我也这么认为。但是SDK在imo中编写得不是很好。我认为这是因为以前有一个P4(或者他们计划稍后添加它),这也可以工作吗?(pocketStatus和Csd.POCKET.P1_FULL)>0。我刚刚在使用此库的一些旧代码中找到它。@stefchri:在您的特定情况下,
>0
可以,但这是一种不好的做法,例如,如果const恰好是
POCKET.P1\u FULL==1