【发布时间】:2013-07-26 09:24:08
【问题描述】:
为什么 Java 中的表达式 (-1 >>> 32) 被评估为 -1 而不是预期的 0? >>>-shift-operator 应填充前面的 0,因此结果应将所有位设置为 0。
这很奇怪,因为它破坏了>>> 的语义:例如(-1 >>> x) 将所有 0 <= x <= 31 的前 x 位设置为 0。唯一(意外)例外是 32。
这是故意的行为、错误还是(过度激励的)编译器优化?
我使用表达式 ~(-1 >>> x) 将 cidr-netmask 扩展为等效的 32 位,但看起来 /32-masks 必须单独处理。
【问题讨论】:
标签: java expression operator-keyword bit-shift shift