Both are bitwise operators. They are an essential notion in ROM Hacking and programming in general. You use them to manipulate binary values in various ways. You should get familiar with these operators as a first step in ROM Hacking, along with hexadecimal notation. Wikipedia has a good page about them:

http://en.wikipedia.org/wiki/Bitwise_operation.

The << means shift bits to the left. Mathematically speaking, it effectively multiplies your value by 2.

The & means bitwise AND. Used to keep (or "mask") specific bits. Not to be confused with &&, which is the logical AND, used in boolean logic.

In your specific case, the value of "bank" is shifted 14 times to the left, then added to the value of "pointer" with the 2 most significant bits masked (set to 0).

Let's say "bank" = 3, and "pointer" = ABCD.

0003 in binary -> 0000 0000 0000 0011

ABCD in binary -> 1010 1011 1100 1101

3FFF in binary -> 0011 1111 1111 1111

0003 << 14 = 1100 0000 0000 0000 = C000

ABCD & 3FFF = 0010 1011 1100 1101 = 2BCD

C000 + 2BCD = EBCD

So your final pointer value is EBCD. You may have to add an arbitrary value (like 0x10) to account for the ROM header, if there is one...