如果我想找到24位二进制补码整数的绝对值,是否最好屏蔽该整数,并且在需要时取反原始数字?

为了更好地说明我的意思:

public static int bitwiseAbsoluteValue(int n) {
      if (n == 0x800000) {
           return 0x000000;
      } else {
           if ((n & 0x800000) == 0x800000) {
                 return (~n + 1) & 0x7FFFFF;
           } else {
                 return n;
           }
      }
}


这行得通吗?

最佳答案

您还需要屏蔽第一个返回值:

return (~num + 1) & 0x7FFFFF;


如果传入的值是0x800000,则需要计算要执行的操作。当前函数将返回0,这显然是不正确的。

09-27 15:09