仅使用
! ~ & ^ | +
如何确定 32 位数字是否为 TMax?
TMax 是最大值,二进制补码。
到目前为止我的想法是:
int isTMax(int x)
{
int y = 0;
x = ~x;
y = x + x;
return !y;
}
这只是我尝试过的许多失败的事情之一,但我只是想不出 TMax 的属性可以让我恢复 TMax。就像将 tmax 添加到自身与所有其他整数相比将是唯一的。
这是实际问题:
/*
* isTMax - return 1 if x is the maximum, two's complement number,
* and 0 return otherwise.
* Legal ops: ! ~ & ^ | +
* Max ops: 10
* Rating: 1
*/
int isTMax(int x) {
int y = 0;
x = ~x;
y = x + x;
return !y;
}
int 是 32 位,所以最大有符号数可能是 0x7FFFFFFF
据我所知,在不知道某个类型的最大值并进行直接比较的情况下,无法确定某个特定值是否是有符号 类型的最大值。这是因为带符号的表达式在溢出时会遇到未定义的行为。如果您的问题有答案,则意味着存在一个严重的未解决问题的答案,这个问题已经在 SO 上浮现了一段时间:如何以编程方式确定给定签名类型的最大值。
我是一名优秀的程序员,十分优秀!