Может ли кто-нибудь объяснить мне, как я преобразовываю 32-разрядное значение с плавающей точкой в 16-разрядное значение с плавающей точкой?
(s = знак e = экспонента и m = мантисса)
Если 32-разрядное число с плавающей запятой равно 1s7e24m
И 16-разрядное число с плавающей запятой равна 1s5e10m
Тогда это так же просто, как делать?просто ... так может кто-нибудь сказать мне, что вам НУЖНО сделать?
Редактировать: Я вижу, что у меня неправильный сдвиг экспоненты ... так что ЭТО было бы лучше?
fltInt16 = (fltInt32 & 0x007FFFFF) >> 13;
fltInt16 |= (fltInt32 & 0x7c000000) >> 13;
fltInt16 |= (fltInt32 & 0x80000000) >> 16;
Я надеюсь, что это правильно.Извиняюсь, если я пропускаю что-то очевидное, что было сказано.В полночь пятницы почти полночь ... так что я не "полностью" трезв;)
Правка 2: Упс.Снова заглянул.Я хочу потерять 3 верхних бита, а не нижние!Так как насчет этого:
fltInt16 = (fltInt32 & 0x007FFFFF) >> 13;
fltInt16 |= (fltInt32 & 0x0f800000) >> 13;
fltInt16 |= (fltInt32 & 0x80000000) >> 16;
Окончательный код должен быть :
fltInt16 = ((fltInt32 & 0x7fffffff) >> 13) - (0x38000000 >> 13);
fltInt16 |= ((fltInt32 & 0x80000000) >> 16);