在C中将符号扩展名从16位扩展到32位

前端之家收集整理的这篇文章主要介绍了在C中将符号扩展名从16位扩展到32位前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须为16位整数做一个符号扩展,由于某种原因,它似乎没有正常工作.谁能告诉我代码中的bug在哪里?我已经工作了几个小时.
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位的数字.

解决方法

尝试:
int signExtension(int instr) {
    int value = (0x0000FFFF & instr);
    int mask = 0x00008000;
    if (mask & instr) {
        value += 0xFFFF0000;
    }
    return value;
}

猜你在找的C&C++相关文章