The top bits of the ADC aren't zero-initialised, so you need to manually mask them away:
reading &= 0x3FF; // binary 0000001111111111, i.e. ten bits for ADC
You can then verify that this is correct by tying your analog pin to ground and Vref respectively, and checking that the resulting values match expectations.
In case anyone else runs into the same problem, using a different implementation of reading the ADC, ensure that your endianness and bit-ordering are correct.