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

前端之家收集整理的这篇文章主要介绍了在C中将符号扩展名从16位扩展到32位前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须为16位整数做一个符号扩展,由于某种原因,它似乎没有正常工作.谁能告诉我代码中的bug在哪里?我已经工作了几个小时.
  1. int signExtension(int instr) {
  2. int value = (0x0000FFFF & instr);
  3. int mask = 0x00008000;
  4. int sign = (mask & instr) >> 15;
  5. if (sign == 1)
  6. value += 0xFFFF0000;
  7. return value;
  8. }

指令(instr)是32位,在里面我有一个16位的数字.

解决方法

尝试:
  1. int signExtension(int instr) {
  2. int value = (0x0000FFFF & instr);
  3. int mask = 0x00008000;
  4. if (mask & instr) {
  5. value += 0xFFFF0000;
  6. }
  7. return value;
  8. }

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