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位比较将需要一些额外的时间,但可能比管道断点少。