Расширение знака с 16 до 32 бит в C

Мне нужно сделать расширение знака для 16-битного целого числа, и по какой-то причине он, похоже, не работает должным образом. Может ли кто-нибудь сказать мне, где ошибка в коде? Я работал над этим несколько часов.

int signExtension(int instr) {
    int value = (0x0000FFFF & instr);
    int mask = 0x00008000;
    int sign = (mask & instr) >> 15;
    if (sign == 1)
        value += 0xFFFF0000;
    return value;
}

Инструкция (instr) состоит из 32 бита, а внутри у меня есть 16-битное число.

6
задан Sorin Cioban 2 June 2011 в 13:59
поделиться