java - Java中的双重比较技巧

标签 java comparison

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

(unsigned)X < (unsigned)Upper

什么时候返回真

0 <= X < Upper

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

更新:

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

对于普通的 int 问题仍然悬而未决。

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

最佳答案

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

(x & 0xffffffffL) < upper

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

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

关于java - Java中的双重比较技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39972446/

相关文章:

java - android - 为什么当前时间小于日历中的回溯日期时间

java - Selenium +TestNG+Gradle : Report file name

c - int 和 float 之间的关系比较是否可以在 C 中直接进行?

performance - 为什么 Clojure Hello World 程序与 Java 和 Python 相比如此慢?

Excel成绩单

MacOS 上的 Java.lang.UnsupportedClassVersionError

java - 为什么不简单地禁用未经检查的警告?

performance - 存在 NaN 值时的 Matlab 关系运算符性能

java - 使用 SQLite 写入的行数比预期少

mysql - 如何在mysql中查询重复的字符串条目