Search code examples
objective-cbit-manipulationflags

Bitwise check if some flags are set, others aren't?


I have a int-flag which will be like this:

  • 0 = unseen, unread
  • 1 = Seen
  • 2 = Read
  • 4 = answered

Now I have this code:

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"];
}

Which means first if: answered, second if: readed, last if: unreaded.

Now a user can be answered a mail, but set the flag manually to unread. That means the int value is 5.

How to check this?

I tried this:

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

But I not only get 5 in this, I get 7 also.
How to check for 5, but not for 7?


Solution

  • The obvious would be if((flag & 5) && !(flag & 2))