【问题标题】:Findbugs showing "BIT_ADD_OF_SIGNED_BYTE" bugFindbugs 显示“BIT_ADD_OF_SIGNED_BYTE”错误
【发布时间】:2012-12-20 19:04:20
【问题描述】:

我编写了以下代码,但 findbugs 显示此错误:BIT_ADD_OF_SIGNED_BYTE。我尝试了很多,但可能是我没有正确理解左移的概念。

void problem() {
    byte [] byteArray = {1, 2, 3, 4, 5};
    int localOne = 0;
    for(int i = 0; i < 4; i++) {
        localOne = (localOne<<8) + byteArray[i]; 
    }
}

【问题讨论】:

标签: java findbugs


【解决方案1】:

您正确地进行了轮班,您的(可能的)错误是在将签名的 byte 添加到 int

由于符号扩展,您需要这样做:

localOne = (localOne<<8) + (0xFF & byteArray[i]); 

假设您有字节80(十六进制),即1000 0000(二进制),这是-128(十进制),因为两者的补码表示。现在,当将其添加到int 时,它首先会转换为int。结果int不是

0000 0000  0000 0000  0000 0000  1000 0000

(二进制)它将是

1111 1111  1111 1111  1111 1111  1000 0000

(二进制)因为符号扩展。要获得第一个,您必须按位应用 0xFF ,这是二进制:

0000 0000  0000 0000  0000 0000  1111 1111

【讨论】:

  • 嗨 jlordo :我已经这样做了,但你能解释一下这是如何工作的吗?
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多