C++ 允许您将两个整数比较合并为一个以进行范围检查,例如
(unsigned)X < (unsigned)Upper
当
0 <= X < Upper
Java 语言没有无符号类型。您是否找到了一种方法来获得相同的效果,使用单个比较并且没有太多的开销?
Update:
根据 @Bathsheba 的评论, char 类型是无符号 16 位,并且适合我的目的,因为我的整数实际上在 Shorts 范围内。
这个问题仍然悬而未决int
s.
可能有以下内容(X | (Upper - 1 - X)) >= 0
,允许 30 位的范围。
如果您希望 Java 中的数据类型能够保存无符号 32 位 int 可以保存的值范围,那么您需要long
。您可以使用 32 个一位进行位掩码,将可能为负的有符号 int 转换为肯定为正的long
value.
(x & 0xffffffffL) < upper
// ^
// Implicit conversion to long (of both arguments)
当然,64 位“与”和 64 位比较将花费一些额外的时间,但可能少于管道中断时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)