/*
* isTmax - returns 1 if x is the maximum, two's complement number,
* and 0 otherwise
* Legal ops: ! ~ & ^ | +
* Max ops: 10
* Rating: 1
*/
int isTmax (int x)
{
int t = x + 1;
return !(t + t) ^ !t;
}
如果x是最大的2的补数,则2 * t溢出为0,但如果x为-1则也为0,所以我们用!t对它求和,其结果为1。因此我们必须得到1,但输出为0。
此代码从根本上是错误的。有符号的溢出是未定义的行为,不能保证提供任何形式的确定性结果。
要检查数字是否为“最大数”,您宁愿将其与limits.h中的INT_MAX
进行比较。或者,如果愿意,可以将其与(int) ((1u<<31)-1)
进行比较。