The documentation lists & ^ | as having equal precedence. This is incorrect, as if this were true:
1 ^ 4 & 4
would be equal to 4:
(1 ^ 4) = 5
(5 & 4) = 4
Instead, you get the result of 5.
That's because this operation is running instead:
(4 & 4) = 4
(1 ^ 4) = 5
Again, per reference:
(1 ^ 4 & 4) == ((1^4)&4)
But in reality:
(1 ^ 4 & 4) == (1 ^ (4 & 4))