【问题标题】:FindBugs: INT_VACUOUS_BIT_OPERATION发现错误:INT_VACUOUS_BIT_OPERATION
【发布时间】:2013-02-27 21:33:00
【问题描述】:

为了从 int 转换为 IP 字符串,我使用 Going from 127.0.0.1 to 2130706433, and back again 中的方法

private static final byte BYTE_MASK = (byte)0xff;

protected byte[] unpack(int bytes) {
    return new byte[] {
        (byte)((bytes >>> 24) & BYTE_MASK),
        (byte)((bytes >>> 16) & BYTE_MASK),
        (byte)((bytes >>>  8) & BYTE_MASK),
        (byte)((bytes       ) & BYTE_MASK)
   };
}

但是Eclipse 中的FindBugs 会产生错误:INT_VACUOUS_BIT_OPERATION

INT_VACUOUS_BIT_OPERATION:不做任何有意义工作的位操作。

为什么会这样以及如何解决?

【问题讨论】:

    标签: java bit-manipulation findbugs


    【解决方案1】:

    我怀疑这是因为如果您转换为byte,则不需要& BYTE_MASK。我假设BYTE_MASK 是 0xff ......在这种情况下,它基本上没有意义。只是施法也会有同样的效果。

    来自section 5.1.3 of the JLS

    有符号整数到整数类型 T 的窄化转换只会丢弃除 n 个最低位之外的所有位,其中 n 是用于表示类型 T 的位数。除了可能丢失有关数值,这可能会导致结果值的符号与输入值的符号不同。

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 2017-11-18
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多