我正在尝试确定是否可以计算两个 32 位整数之和而不会溢出,同时仅使用某些按位运算符和其他运算符。因此,如果整数 x 和 y 可以相加而不会溢出,则以下代码应返回 1,否则返回 0。
(((((x >> 31) + (y >> 31)) & 2) >> 1))
但是,它应该为 1 时返回 0,反之亦然。当我使用逻辑 NOT (!) 运算符或使用 0x1 的按位 XOR (^) 时,它不能解决问题。
!(((((x >> 31) + (y >> 31)) & 2) >> 1))
(((((x >> 31) + (y >> 31)) & 2) >> 1) ^ 0x1)
^ 这些不起作用。
提前致谢。