2012-12-20 83 views
0

我已經寫了下面的代碼,但findbugs是shwowing這個錯誤:BIT_ADD_OF_SIGNED_BYTE。我嘗試了很多,但可能是我沒有正確理解左移的概念。Findbugs顯示「BIT_ADD_OF_SIGNED_BYTE」bug

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

你讀過[該警告的描述(http://findbugs.sourceforge.net/bugDescriptions.html )? – assylias

回答

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 
+0

嗨jlordo:我已經完成了它的工作,但你可以解釋這是如何工作的? –

+0

@SandeepNautiyal看到我的編輯。 – jlordo