Findbugs显示“BIT_ADD_OF_SIGNED_BYTE”错误

时间:2012-12-20 10:05:46

标签: java findbugs

我编写了以下代码,但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]; 
    }
}

1 个答案:

答案 0 :(得分:2)

您正确地进行了转换,将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