Java中的双重比较技巧

时间:2016-10-11 07:38:36

标签: java comparison

C ++允许您将两个整数比较合二为一,以进行范围检查,例如

(unsigned)X < (unsigned)Upper

时返回true
0 <= X < Upper

Java语言没有无符号类型。您是否看到了一种获得相同效果的方法,使用单一比较而不是太多开销?

更新

根据@Bathsheba的评论,char类型是无符号的16位,适合我的目的,因为我的整数实际上是在短路范围内。

对于int s,问题仍然存在。

可能是(X | (Upper - 1 - X)) >= 0行中的某些内容,它允许30位的范围。

1 个答案:

答案 0 :(得分:4)

如果您希望Java中的数据类型能够保存无符号32位int可以容纳的值范围,那么您需要long。您可以使用32位一位进行位掩码,以将可能为负的signed int转换为肯定为正long的值。

(x & 0xffffffffL) < upper

//             ^
//             Implicit conversion to long (of both arguments)

当然是64位&#34;和&#34;并且64位比较将花费一些额外的时间,但可能比管道线断裂少。