为什么(-1 >>> 32)
Java中的表达式被评估为-1
而不是0
预期的?-shift >>>
-operator 应填充前面的 0,因此结果应将所有位设置为 0。
这很奇怪,因为它破坏了>>>
: 例如(-1 >>> x)
将前 x 位设置为 0的语义0 <= x <= 31
。唯一的(意外的)异常是 32。
这是故意的行为、错误还是(过度激励的)编译器优化?
我使用表达式~(-1 >>> x)
将 cidr-netmask 扩展为等效的 32 位,但看起来 /32-masks 必须单独处理。