& has different meanings in different situations.

"&variablename" is the address of variablename.

"variable & variable" is a logical and between two variables or literals.

"ascii & 0xf" is the value in ascii anded with 0xf.

If ascii contains 0x8B, that is a binary value 10001010. 0xf is 00001111.

And the two together and you get 00001010.

Or, 0xB. A quirk (or a design) of the ASCII character set places certain character groups on aligned boundaries which can be isolated with simple mathematical operations like this. Ascii '3' is 0x33. And that with 0xf (which is the same as 0x0f) and you get 0x03 (or 3 in decimal).