2

我必须创建一个函数来检查输入数字是否为-1。这是要求

isTmin - returns 1 if x is the minimum, two's complement number, and 0 otherwise 
Legal ops: ! ~ & ^ | +
Max ops: 10
Rating: 1

首先我试试这个:

int isTmin(int x) {
  return !(x^(0x01<<31));
}

这种方法有效,但我不允许使用移位运算符。有什么想法如何在不使用移位运算符的情况下解决这个问题?

4

2 回答 2

1
int isTmin(unsigned x) {
    return !x ^ !(x+x);
}

请注意,您需要unsigned在 C 中使用二进制补码数学和正确的包装——int及其实现/未定义。

于 2013-04-12T04:01:07.810 回答
0

如果它唯一需要检查的是它是否为 0xffff ffff,那么:

return x^0xffffffff == 0

仅当 x 也是 时才成立0xffffffff

于 2013-04-12T03:52:02.233 回答