有符号整数比较,无需比较运算符或加宽

问题描述 投票:0回答:1

我正在寻找一个有符号整数比较函数

cmp(x: Int, y: Int) -> Int
,它不使用任何比较运算符(
<
<=
>
>=
<=>
等),不使用扩大较大尺寸的整数,理想情况下仅使用加法、减法、按位运算符以及相等和不等运算符 (
==
!=
)。

我已经测试了比较运算符hereherehere,但它们对于某些输入值都失败了(here是Rust中的测试程序)。前两个似乎是最有希望的,但它们在相同的值上失败了,可能是因为减法中的下溢。

comparison bit-manipulation integer-overflow
1个回答
0
投票

您没有指定

cmp
实际上应该做什么。我假设它应该像您链接到的测试代码一样计算
x > y
,也就是说,这不是像您链接到的其他一些问题那样进行三向比较。

然后您就可以使用

(((x ^ y) >> 1) - ((x ^ y) & x)) < 0

(算术移位和

-
换行)。

© www.soinside.com 2019 - 2024. All rights reserved.