我必须为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; }