DS18B20 temperature interpretation
You don't shift, you divide.

The value is a simple 16-bit signed integer that is 16 times larger than the temperature.  Just assign the value to a 16-bit integer, then divide it by 16.0 as a floating point number:

int16_t min5s = 0xFF5E;
double d = (double)min5s / 16.0;
printf("%g\n", d);

&gt;&gt;&gt; -10.125