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