按位运算符:问题

时间:2011-09-01 16:08:30

标签: objective-c bit-manipulation

我有一个int-flag,就像这样:

  • 0 =看不见,未读
  • 1 =见过
  • 2 =阅读
  • 4 =已回答

现在我有了这段代码:

if (flag & 4) //Beantwortet
{
    imageView.image = [UIImage imageNamed:@"beantwortet-40.png"];
}
else  if (flag & 2) //ungelesen
{
    imageView.image = [UIImage imageNamed:@"Flag1-40.png"]; 

}
else
{
       imageView.image = [UIImage imageNamed:@"neu-40.png"];
}

这意味着首先是:回答,第二个是:readed,last if:unreaded。

现在可以回复用户的邮件,但手动将标志设置为未读。这意味着int值为5.

如何检查?

我试过了:

    else if (flag & 4 && flag & 1) //Beantwortet, aber auf "Nicht gelesen" gesetzt
{
    imageView.image = [UIImage imageNamed:@"neu-40.png"];
}

但是我不仅得到5分,而且还得到7分。 如何检查5,但不是7?

2 个答案:

答案 0 :(得分:1)

显而易见的是if((flag & 5) && !(flag & 2))

答案 1 :(得分:0)

为什么不检查int值是否为5,就像你说的那样?

else if (flag == 5) //Beantwortet, aber auf "Nicht gelesen" gesetzt
{
    imageView.image = [UIImage imageNamed:@"neu-40.png"];
}

更新:如果您有超过前四个的标记,您可以预先过滤该值,然后进行检查:

else if ((flag & 7) == 5) //Beantwortet, aber auf "Nicht gelesen" gesetzt
{
    imageView.image = [UIImage imageNamed:@"neu-40.png"];
}

这将掩盖除前三个之外的所有标志,因此即使其他标志设置为例如8或16,它们也不会参与此检查。