Java中的双重比较技巧

C ++允许您将两个整数比较组合在一起进行范围检查,例如

(unsigned)X < (unsigned)Upper 

当返回时返回true

 0 <= X < Upper 

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

更新

从@Bathsheba的评论来看,char类型是无符号的16位并且适合我的目的,因为我的整数实际上在短裤的范围内。

对于简单的问题,这个问题仍然存在。

可能是(X | (Upper - 1 - X)) >= 0 ,它允许30位的范围。

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

 (x & 0xffffffffL) < upper // ^ // Implicit conversion to long (of both arguments) 

当然,64位“和”和64位比较将需要一些额外的时间,但可能比管道断点少。