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