Undestanding LIS3DSH datasheet and AN339 Application Note - Intepreting accelerometer data
No, not AND, you want to use OR.  You need something like this:

int x = (((unsigned int) OUT_X_H) &lt;&lt; 8) | ((unsigned int) OUT_X_L)
int y = (((unsigned int) OUT_Y_H) &lt;&lt; 8) | ((unsigned int) OUT_Y_L)
int z = (((unsigned int) OUT_Z_H) &lt;&lt; 8) | ((unsigned int) OUT_Z_L)


This will shift over the high byte and then OR the two bytes together for the 16 bit result.  Even though the 16 bit number is signed, you need to do the combination on unsigned numbers so that you don't accidentally sign-extend something.  Make sure you don't get the MSB and LSB mixed up, either!  Just a few days ago I helped someone debug this exact problem - reading from an accelerometer and accidentally reassembling the data incorrectly.