Предполагая, что у вас есть 16-битное (2-байтовое) шестнадцатеричное значение (например, "FFFF") в ячейке A1, вы можете сделать это:
=BITXOR(HEX2DEC(A1),2^15)-2^15
Это будет:
- Преобразование шестнадцатеричного значения в десятичное число без знака (с предполагаемым отрицательным диапазоном чисел, начинающимся с 2 ^ 15, то есть выше предполагаемого неотрицательного диапазона).
- Инвертирует старший значащий бит (бит 15) вчтобы поменять местами предполагаемые неотрицательные и отрицательные диапазоны (оба диапазона все еще неотрицательны в этой точке, но теперь предполагаемый отрицательный диапазон находится ниже предполагаемого неотрицательного диапазона).
- Сдвиньте оба диапазона вниз, чтобыпредполагаемый отрицательный диапазон достигает своего конечного пункта назначения ниже нуля, а предполагаемый неотрицательный диапазон достигает своего конечного пункта назначения с нуля и выше.
Примеры: «0» становится 0, «7FFF» становится 32767,«8000» становится -32768, а «FFFF» становится -1.
Примечание: если входное значение содержит мусор (например, «0x») до или после фактического шестнадцатеричного значения, то этот мусор должен быть удален (например, делая MID (A1,3,4)) до вызова HEX2DEC.