I6 operator precedence

I discovered to my horror that ~A & B is parsed as ~(A & B). I guess this isn’t a bug since the DM4 says that ~ and & have the same precedence. But these choices seem totally bizarre to me:

  • unary operators don’t always have higher precedence than binary ones;
  • unary minus and bitwise negation don’t have the same precedence;
  • unary minus has higher precedence than array indexing (so that -A–>B actually negates the address A rather than the value A–>B).

Of course I6 is not bound to do things like C, but the syntactic similarity might lead one into error (as it did me). Is there a rationale behind these differences?

I’m going with “lost in the mists of time” there.