C++允许您将两个整数比较组合在一起进行范围检查,例如
(unsigned)X < (unsigned)Upper
Run Code Online (Sandbox Code Playgroud)
当返回时返回true
0 <= X < Upper
Run Code Online (Sandbox Code Playgroud)
Java语言没有无符号类型.您是否看到了一种获得相同效果的方法,使用单一比较而不是太多开销?
更新:
从@Bathsheba的评论来看,char类型是无符号的16位并且适合我的目的,因为我的整数实际上在短裤的范围内.
问题仍然存在问题int
.
可能是某些东西(X | (Upper - 1 - X)) >= 0
,允许30位的范围.
如果您希望 Java 中的数据类型能够保存无符号 32 位 int 可以保存的值范围,那么您需要long
. 您可以使用 32 个一位进行位掩码,将可能为负的有符号 int 转换为肯定为正的long
值。
(x & 0xffffffffL) < upper
// ^
// Implicit conversion to long (of both arguments)
Run Code Online (Sandbox Code Playgroud)
当然,64 位“与”和 64 位比较将花费一些额外的时间,但可能少于管道中断时间。
归档时间: |
|
查看次数: |
197 次 |
最近记录: |