How to interpret the values sent by an MPU-9255?
The MPU-9255 is giving you a 16-bit, signed integer. Your code is interpreting it as unsigned.

An unsigned, 16-bit number can represent values from 0 to 65535. A signed 16-bit number represents -32768 to +32767.

Here is an 8-bit example from Wikipedia:



To make the conversion, first look at the high bit. If it is \$0\$, then no conversion is necessary. If it is \$1\$, then \$signed = (unsigned - 2^N)\$, where \$N\$ is the number of bits. Sixteen, in your case.

Here is a simple method for 16 bits:

uint16_t unsignedAccelX;
int16_t signedAccelX;

if (unsignedAccelX &lt; 32768)
{
    signedAccelX = unsignedAccelX;
}
else
{
    signedAccelX = unsignedAccelX - 65536;
}


There are many more elegant and/or efficient ways of doing this. There is some discussion here.

Good luck!