好多java開發人員在面試時經常會遇到一些數據類型轉換的題目,乍一看覺得簡單可是又有些不確定。。。相信很多人都有這個時候,那麼今天我給大家將一個我面試的題,希望和衆多程序猿一起分享!以下是代碼:
class test{
public static void main(String[] args){
byte by = 150;
System.out.println(by);
}
}
問程序運行後出現什麼結果?請幫忙修改代碼。
估計好多人都會說肯定不對,而且程序確實有錯 。。。。。。因爲java程序中整數默認的都是int型,那如果把整數賦值給byte肯定會出現運算精度丟失的問題,相信大家也都知道!有人經過修改後呢 是這樣的 byte by = (byte)150; 強轉一下不就行了嗎?是這樣的 但事實最後程序最後的結果是 -106!!!
好了我來講一下原因!仔細聽
150的補碼:00000000 00000000 00000000 10010110
現在我們拿了長度爲8的一個空間來截取,截取之後的補碼:
截取之後的補碼:10010110
但是輸出語句輸出的都是原碼的十進制形式,所以需要求出截取之後的原碼
截取之後的補碼:10010110
反碼:10010101
原碼:11101010=-106