Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Преобразование прямого кода в десятичный

#cpp


Подскажите, пожалуйста, как правильно преобразовать прямой код в десятичный?

Прямой код лежит в векторе:

std::vector code;


Содержимое вектора: 0x90 0xa8 0x02.
При этом code[0] - десятичная часть, а в code[2] и code[1] целая. Причем старший
бит в code[2] обозначает знак числа.

Я реализовал так:

    // calculate
    int8_t pm = 1;
    if (result[2] & 1<<7){
        pm=-1;
        result[2] ^= 1<<7;
    }
    y = (result[2]*256 + result[1] + result[0]/256.0) * pm;


Результат правильный. Но как-то длинно и, мне кажется, неэффективно.
    


Ответы

Ответ 1



Конечно, можно поиздеваться и сделать так: double dres(const vector&result) { struct Data { unsigned long i: 23; int sign : 1; }; Data *d = (Data*)&result[0]; return double(d->i)/256 *(d->sign ? -1 : 1); } Ну, принцип вы поняли? У вас мне очень не нравится то, что вы меняете result[2]: result[2] ^= 1<<7;

Комментариев нет:

Отправить комментарий