У меня есть количество бит (количество бит может измениться) в беззнаковом int (uint32_t).Например (в примере 12 битов):
uint32_t a = 0xF9C;
Биты представляют целое число со знаком этой длины.В этом случае десятичное число должно быть -100.Я хочу сохранить переменную в знаковой переменной и получает это фактическое значение.Если я просто использую:
int32_t b = (int32_t)a;
, это будет просто значение 3996, поскольку оно приводится к (0x00000F9C), но на самом деле оно должно быть (0xFFFFFF9C)
Я знаю один способсделайте это:
union test
{
signed temp :12;
};
union test x;
x.temp = a;
int32_t result = (int32_t) x.temp;
Теперь я получаю правильное значение -100
Но есть ли лучший способ сделать это?Мое решение не очень гибкое, так как я упомянул, что число битов может варьироваться (от 1 до 64 бит).