You can usually figure out conversions like these by examining the units. If you divide the ADC reading with units of counts by the sensitivity with units of counts/g then the units of counts in the numerator and denominator of the division will cancel each other out leaving you with g, your desired result.
So you need to divide the ADC count by the sensitivity to convert to acceleration but in this case you also have to account for the offset. This accelerometer measures both positive and negative acceleration but the ADC count is unsigned. This is possible because the ADC count value of zero doesn't correspond to zero g, rather it corresponds to the most negative acceleration. And the midpoint of the ADC value range corresponds to zero acceleration.
So you have an ADC count range of 0-1023 counts with a sensitivity of 256 counts/g. And the acceleration range of -2 to +2 g (technically +1.996 g) means that you have an offset of -2 g.
acceleration = (ADC count value / sensitivity) + offset
examples:
- 256 counts / (256 counts / g) - 2 g = -1 g
- 1023 counts / (256 counts / g) - 2 g = +1.996 g
Shifting right 8 bits is the same as dividing by 256. But in this case you have to be careful that you don't lose too much resolution when you shift. For example if you shift the 10 bit ADC reading right by 8 bits then you'll be left with only 2 bits corresponding to only 4 possible readings (-2, -1, 0, and 1 g).
Multiplying the count value by 1000 mg/g before shifting right by 8 bits will save that resolution and provide the acceleration in units of mg rather than g.
It looks like the MMA8653 provides the 10-bit ADC value in the most significant 10 bits of the 16-bit register. In other words the ADC value is shifted left by 6 bits (or multiplied by 64). You'll need to account for this too, perhaps by shifting right 6 before multiplying by 1000. And once you multiply by 1000 the value won't fit in 16 bits anymore so you'll have to move to a 32 bit value.