Java中的双重比较技巧

C ++允许您将两个整数比较合并为一个用于范围检查,如

(unsigned)X < (unsigned)Upper

当时,它返回true

0 <= X < Upper

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

更新

从@Bathsheba发表的评论中,字符类型是无符号的16位,并且符合我的目的,因为我的整数实际上在短路范围内。

问题仍然是开放的平原int秒。

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


如果您希望Java中的数据类型能够保存无符号32位整数可以容纳的值的范围,那么您需要long 。 您可以使用32个1位的位掩码将可能为负值的带符号整数转换为可靠的long整型值。

(x & 0xffffffffL) < upper

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

当然,64位“和”以及64位比较需要一些额外的时间,但可能会少于管道中断。

链接地址: http://www.djcxy.com/p/93559.html

上一篇: Double comparison trick in Java

下一篇: WCF: The deserializer has no knowledge of any type that maps to this name