The ADC result is 10-bit, from a single ended input. That is always a positive integer, not twos-compliment. It's stored in two byte registers (ADRESH, ADRESL as its an 8-bit device) either left, or right justified. Often for controls that don't need the full 10-bits, I'll left justify it, and just read the high byte. As C compilers deal with multibyte numbers, I've only ever seen 'ADRES' as an unsigned int, or unsigned short (depends on compiler). You can of course read the two byte registers individually as chars and merge them to an unsigned int, but no point as thats what the compiler does for you.
you could make this a signed value by subtracting the mid value, but I don't see much point.
short result_left, result_right; //variables to store our ADC result
Should be
unsigned short result_left, result_right; //variables to store our ADC result
As the XC8 compiler defaults to signed for integers, except char's, which are of course, always unsigned. Annoying I know, I would have thought the default should always be unsigned.