今天在做書上的一個例子的時候, 要使用byte類型,首先我很直接的就寫到了byte b = 0XAA, 結果報錯, 說從int轉換到byte可能會有損失. 我當時就很奇怪, 為什么會出現這種情況呢? 0XAA轉化為10進制的byte類型就是-86, 並沒有超出-128~127的范圍.而且如果直接賦值byte b = -86 ; 也是正常通過.
經過網上一位前輩的教導, 現在有了這樣的結論:
- 在計算機中是沒有正負數的區分的, 所有的正負數都是人為規定的
- byte類型的最小值-128二進制位1000 0000 , 其實就是-0, 是人為規定的.
- java程序中遇到16進制數, 會優先處理成數值, 也就是10進制中的數值部分, 而不是包括符號位的數據
所以在進行byte b = 0XAA; 這樣的賦值的過程中, 0XAA被處理成0 1000 0000 也就是int類型的170 , 然后0 1000 0000轉化成byte類型. 由於byte類型放不下符號位在內的全部數據, 所以報錯會有精度損失.
//這些都是我通過前輩的指導中理解的, 如果有什么不對的地方, 歡迎指正.^_^
