temp&=0x7FF0; - тут знак уже потерян.
te=(temp*(-1))*0.0625; - тут вычисления дают уже чёрте что, число становится отрицательным, т.е. после маскирования в старших четырёх разрядах - теперь все единицы.
Не надо забывать, что отрицательные числа кодируются в ДОПОЛНИТЕЛЬНОМ коде! Маскировать надо после смены знака, а не до.
Напиши, пожалуйста, как это должно выглядеть. Для наглядности полученных данных положу кусочек даташита.
TEMPERATURE REGISTER
The Temperature Register of the TMP121 and TMP123 is
a 16-bit, signed read-only register that stores the output of
the most recent conversion. Up to 16 bits can be read to
obtain data and are described in Table 1. The first 13 bits
are used to indicate temperature with bits D2 = 0, and D1,
D0 in a high impedance state. Data format for temperature
is summarized in Table 2. Following power-up or reset, the
Temperature Register will read 0°C until the first
conversion is complete.
D15| D14| D13| D12| D11| D10| D9| D8| D7 |D6 |D5| D4| D3 |D2 |D1 |D0
T12| T11| T10| T9 | T8 | T7 | T6| T5| T4 |T3 |T2| T1| T0 |0 |Z | Z (Только у меня D4 тоже=0)
Table 1. Temperature Register
T°C DIGITAL OUTPUT(1)
(BINARY) HEX
150 0100 1011 0000 0000 4B00
125 0011 1110 1000 0000 3E80
25 0000 1100 1000 0000 0C80
0.0625 0000 0000 0000 1000 0008
0 0000 0000 0000 0000 0000
−0.0625 1111 1111 1111 1000 FFF8
−25 1111 0011 1000 0000 F380
−55 1110 0100 1000 0000 E480