2015-10-21 40 views
0

以字節我有以下代碼:轉換整數Java中

int i =128; 
    byte b = (byte) i; 
    System.out.println(Integer.toBinaryString(i)); //10000000 
    System.out.println(Integer.toBinaryString(b)); //11111111111111111111111110000000 

有人能解釋爲什麼1個的從整數強制轉換爲字節,怎麼可能一個字節攜帶超過8位時被添加到左邊!?

+1

'Integer#toBinaryString'接受'int',而不是'byte'。 'byte'值被擴展爲'int'。 –

回答

1

您在Integer類中調用.toBinaryString,所以在任何情況下您的數字都被視爲整數。

第二個電話有這麼多1的原因是因爲它是一個負數。在Java中,字節是帶符號的,所以最大正值是127.通過將128轉換爲一個字節,您實際上代表了-128。當您將這個小的負數轉換爲32位有符號整數時,所有這些1都出現在開頭。

+0

謝謝你指出的問題,但實際上沒有Byte.toBinaryString(i):| –