首页>Program>source

C ++允许您将两个整数比较组合在一起进行范围检查,例如

(unsigned)X < (unsigned)Upper

在以下情况下返回true

0 <= X < Upper

Java语言没有无符号类型.您是否看到一种方法,可以通过一次比较并获得不太多的开销?

Update

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

这个问题仍然对普通 int开放

可能在 (X | (Upper - 1 - X)) >= 0系列中 ,它允许30位的范围。

最新回答
  • 1月前
    1 #

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

    (x & 0xffffffffL) < upper
    //             ^
    //             Implicit conversion to long (of both arguments)
    

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

  • 斯威夫特随机数
  • 从文件读取地图时,Haskell需要比Python更多的内存为什么?