我正在寻找一个有符号整数比较函数
cmp(x: Int, y: Int) -> Int
,它不使用任何比较运算符(<
,<=
,>
,>=
,<=>
等),不使用扩大较大尺寸的整数,理想情况下仅使用加法、减法、按位运算符以及相等和不等运算符 (==
、!=
)。
我已经测试了比较运算符here、here和here,但它们对于某些输入值都失败了(here是Rust中的测试程序)。前两个似乎是最有希望的,但它们在相同的值上失败了,可能是因为减法中的下溢。
您没有指定
cmp
实际上应该做什么。我假设它应该像您链接到的测试代码一样计算 x > y
,也就是说,这不是像您链接到的其他一些问题那样进行三向比较。
然后您就可以使用
(((x ^ y) >> 1) - ((x ^ y) & x)) < 0
(算术移位和
-
换行)。