With bitwise operations, | is like bitwise addition and & is like bitwise multiplication (dropping carry bits if there are any).
(It's very easy to think that a & b is "the one bits from a and the one bits from b", but it's "the bits that are one in both a and b".)